0

我在 Azure 中托管了一个 Web API 项目,作为启用了托管服务标识的 Web 应用程序(所以我不需要应用程序注册,对吗?):

在此处输入图像描述

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

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

这给了我

获取令牌请求返回 http 错误:400 和服务器响应:{"error":"invalid_resource","error_description":"AADSTS50001: 名为 https://mytenant.onmicrosoft.com/d3a219e0-bbbf-496b-a4a4-b9ca485c5a52的应用程序 在名为 xxxxxxxx-xxxx-xxxx-af31-xxxxxxxxxx 的租户中找不到。如果租户管理员未安装应用程序或租户中的任何用户未安装应用程序,则可能会发生这种情况。您可能已发送身份验证请求给错误的租户。

如果我尝试使用对象 id63d571cf-79bf-405d-8304-a31fb64cb953而不是应用程序 id 作为资源 uri 的一部分,我会得到同样的错误。

我究竟做错了什么?

4

2 回答 2

1

我究竟做错了什么?

az account get-access-token用于获取令牌以访问Azure resource. 我们可以从这份文件中获得更多信息。

--资源

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 的详细信息,请参阅本教程和本教程

于 2018-08-16T03:24:10.083 回答
0

资源 URI 不包含您的应用程序 ID 或对象 ID。它是一个单独的标识符,您可以在 App ID URI 下的 App Registration 的属性中找到它。

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

于 2018-08-15T18:02:01.880 回答