【问题标题】:Azure REST API call is authenticated, but not authorized, can't select servicesAzure REST API 调用经过身份验证,但未授权,无法选择服务
【发布时间】:2017-08-11 11:14:36
【问题描述】:

我需要创建一个脚本,该脚本将以编程方式调用 Azure HDInsight REST API,可以是定期从 cron 作业中调用,也可以在用户启动后调用。

我按照 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 时,选项未激活,我无法选择它们。

我已经尝试打开 My permissions => Resource Provider Status 并注册了我认为可能需要的所有内容。

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

【问题讨论】:

  • 让我知道这是否有效,我将简要介绍它作为回应
  • 如果您在 AAD 中看不到任何可选择的服务来为您的应用添加权限,这意味着您没有足够的权限。您的应用程序应该已授予正确的服务权限,并且在分配权限后您需要授予它们。 REST 响应消息似乎在暗示它。

标签: rest azure authorization azure-hdinsight


【解决方案1】:

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

至于访问 HDInsight 服务,article 可以帮助您的应用正确设置。

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2017-01-10
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 2019-10-14
    • 2019-10-09
    • 2021-07-17
    相关资源
    最近更新 更多