2017-08-11 86 views
0

我需要创建一个脚本,以编程方式调用Azure HDInsight REST API,可以定期从cron作业调用,也可以在用户发起调用后。Azure REST API调用已通过身份验证,但未获得授权,无法选择服务

我跟着Azure的文档在Service to service calls using client credentials - First case: Access token request with a shared secret页的说明,我注册了一个新的应用程序与“本土”型,我可以打电话给/token端点使用我的客户秘密运行我的脚本(我获得令牌。阅读Azure文档几个小时,这看起来像正确的方法,但不容易理解的一切,所以我可能会误)

不幸的是,当我尝试进行REST API调用时,我意识到,我已通过身份验证,但未被授权进行这些调用,所以我得到了403 Forbidden(微软称为AuthorizationFailed)。

{'code': 'AuthorizationFailed', 
'message': "The client 'CLIENT' with object id 'OBJ' does not 
    have authorization to perform action 'Microsoft.HDInsight/...' over scope   
    '/subscriptions/SUBID/resourceGroups/RESGR/providers/Microsoft.HDInsight/clusters/CLUSTER'." 
} 

我在哪里可以授权我的应用程序能够让我希望它发出请求?

我去了Azure的门户网站

Active Directory 
    => App registrations => (Select my app) 
    => API Access/Required permissions 
    => (+ button, Add API Access) => 1. Select an API 

在这一点上,好像我无法选择的服务,我可能需要,也有我不能选择服务。例如,当我在搜索栏中键入Azure时,选项不活动,我无法选择它们。

enter image description here

我已经尝试过开放My permissions => Resource Provider Status和注册的一切我想可能是必要的。

我的目录角色是User,我怀疑我可以改变它。

+0

你有没有试过这个:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-integrating-applications –

+0

让我知道如果这个作品我会简要介绍一下响应 –

+0

如果您在AAD中看不到任何可选服务以向应用程序添加权限,则意味着您没有足够的权限。 您的应用程序应该给予正确的服务许可,并在分配许可后您需要授予它们。 REST响应消息似乎暗示它。 –

回答

0

首先,当您使用客户端凭据流时,您的应用程序不应该被注册为“本机”。客户端凭证流由机密客户端应用程序使用,其中可以安全地存储凭证,例如在安全服务器上运行的Web应用程序或服务。 “本地”客户端应用程序是不能以安全方式存储凭据的公共客户端。

对于访问HDInsight服务,此article可能会帮助您的应用程序设置正确。