为启用了MSI的Web应用程序获取访问令牌

时间:2018-08-15 16:05:42

标签: azure oauth-2.0 azure-active-directory azure-msi

我在Azure中托管了一个Web API项目,并将其作为启用了托管服务身份的Web应用程序托管(因此我不需要注册应用程序,对吗?):

enter image description here

现在,我需要获取令牌来访问我的API,以便可以在POSTMAN中使用它:

az login
az account get-access-token --resource "https://mytenant.onmicrosoft.com/d3a219e0-bbbf-496b-a4a4-b9ca485c5a52"

这给了我

  

获取令牌请求返回的HTTP错误:400   和服务器响应:   {“错误”:“ invalid_resource”,“错误描述”:“ AADSTS50001:   应用程序名为   https://mytenant.onmicrosoft.com/d3a219e0-bbbf-496b-a4a4-b9ca485c5a52   在名为的租户中找不到   xxxxxxxx-xxxx-xxxx-af31-xxxxxxxxxx。如果   租户的管理员尚未安装该应用程序   或租户中任何用户的同意。您可能已经发送了   身份验证请求发送给错误的租户。

如果我尝试使用对象ID 63d571cf-79bf-405d-8304-a31fb64cb953而不是应用ID作为资源uri的一部分,则会出现相同的错误。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

  

我在做什么错了?

az帐户获取访问令牌用于获取令牌来访问Azure resource。我们可以从此document获取更多信息。

  

-资源

     

Azure资源终结点。默认为Azure资源管理器。对其他Azure资源使用“ az cloud show”命令

资源应位于以下端点中。并且默认资源为https://management.azure.com/

 "endpoints": {
    "activeDirectory": "https://login.microsoftonline.com",
    "activeDirectoryDataLakeResourceId": "https://datalake.azure.net/",
    "activeDirectoryGraphResourceId": "https://graph.windows.net/",
    "activeDirectoryResourceId": "https://management.core.windows.net/",
    "batchResourceId": "https://batch.core.windows.net/",
    "gallery": "https://gallery.azure.com/",
    "management": "https://management.core.windows.net/",
    "resourceManager": "https://management.azure.com/",
    "sqlManagement": "https://management.core.windows.net:8443/",
    "vmImageAliasDoc": "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/arm-compute/quickstart-templates/aliases.json"
  }

根据我的理解,该命令与您的API访问权限无关。

有关MSI以及如何通过将OAuth 2.0与Azure Active Directory一起使用来保护API的更多信息,请参考此tutorial和此tutorial

答案 1 :(得分:0)

资源URI不包含您的应用程序ID或对象ID。 您可以在“应用程序注册”的“应用程序ID URI”下的“属性”中找到该标识符。

并且由于这是MSI生成的服务主体,因此没有应用程序。我认为您必须在这种情况下注册一个应用程序。