从具有特定范围的 Postman 调用 Azure WebApi

Calling Azure WebApi from Postman with specific scope

我使用 Postman 来测试我在 Azure 中托管的 API。首先我得到一个像这样的访问令牌

因为我使用 grant_type ´client_credentialsI have to use the default scope like this api://my-app-id/.default` 作为解释

但是我的 API 端点之一需要特定范围,因此调用失败,因为我的访问令牌不包含此范围。

我应该如何从具有所需范围的 Postman 进行测试?

如果您使用 Client Credential Flow 获取受 Azure 保护的 api 的访问令牌,您必须创建一个应用程序并向该应用程序授予应用程序权限(这是因为 Client Credential flow 没有用户交互).

然后您需要通过编辑 api 个应用程序的列表来定义应用程序权限。 是一个示例。

接下来,向应用程序授予应用程序权限:

参考此文档并使用客户端凭证流程获取访问令牌here:

1.First您需要征得管理员同意:

GET https://login.microsoftonline.com/{tenant}/adminconsent?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&state=12345
&redirect_uri=http://localhost/myapp/permissions

2.Then您可以通过分享秘密获得访问令牌:

POST /{tenant}/oauth2/v2.0/token HTTP/1.1           //Line breaks for clarity
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
&scope=api://your-app-id/.default
&client_secret=qWgdYAmab0YSkuL1qKv5bPX
&grant_type=client_credentials

解析令牌,您将看到您的自定义 roles

尝试使用令牌访问您的 API。

更新:

根据您的错误,存在用户交互,因此如果您想使用用户令牌,则不应使用 Client Credential Flow,而应使用 auth code flow,并授予 client application 委托权限。

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=api://11f5aca5-ba22-4b7b-8312-60a09aab7xxx/Files.Upload
&state=12345

POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=api://11f5aca5-ba22-4b7b-8312-60a09aab7df5/Files.Upload
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh  

解析令牌,您将看到您的自定义 scp