Azure AD OAuth 令牌错误的受众(客户端凭据流)

时间:2021-04-08 12:13:11

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

我正在尝试获取 OAuth 令牌(client_credentials 流)以便能够调用我的 API。我无法在令牌中找到合适的受众。

在 Azure AD 中,我创建了 2 个应用注册。一个代表我的 API,另一个代表我的客户。

在我的 API 应用注册中,我公开了一个 API App Registration - Expose an API

如您在屏幕截图中所见,我还将我的客户端应用注册添加为“授权客户端应用”。

我还添加了一个应用角色。 App Role

在我的客户端应用注册中,我创建了一个密钥来进行身份验证。

我还在“API 权限”中添加了我的 API 应用注册,并授予了管理员同意。

API Permission

我的问题是当我尝试从 Azure AD 获取令牌时。我在 Postman 中执行以下操作: enter image description here

但是我得到的令牌不包含我指定的受众。它包含默认的“图形 API”受众。 enter image description here

过去 2 天我一直在阅读 OAuth,但我不知道我做错了什么。

另外,请注意,我无法使用 v2.0 端点,因为最后,我执行所有这些操作是为了能够在 Power Automate 中对我的 API 进行身份验证,但我无法选择使用 v2.0端点(以及资源​​或范围参数)。

enter image description here

这是解码的令牌

enter image description here

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

总而言之,我将其作为答案发布。

就像我在评论中所说的,如果您使用的是 OAuth 2.0 协议,当您使用 v1.0 endpoint 请求访问令牌时,您应该使用 resource 参数代替audience 参数,因为 audience 参数不被 OAuth 2.0 协议识别。即使你没有在postman中选择这个参数,你也应该能够获得一个默认的ms graph api token。

audience 参数在 Auth0 组织中常用,但它与 OAuth 2.0 协议有一些区别。 Auth0 的请求 URL 如下:

curl --request POST \
  --url 'https://YOUR_DOMAIN/oauth/token' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data grant_type=client_credentials \
  --data client_id=YOUR_CLIENT_ID \
  --data client_secret=YOUR_CLIENT_SECRET \
  --data audience=YOUR_API_IDENTIFIER