【问题标题】:Azure AD OAuth token wrong audience (client credentials flow)Azure AD OAuth 令牌错误的受众(客户端凭据流)
【发布时间】:2023-03-25 15:05:01
【问题描述】:

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

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

在我的 API 应用注册中,我公开了一个 API

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

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

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

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

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

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

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

另外,请注意我不能使用 v2.0 端点,因为最后,我这样做是为了能够在 Power Automate 中对我的 API 进行身份验证,并且我没有使用 v2.0 的选项端点(以及资源​​或范围参数)。

这是解码的令牌

任何帮助将不胜感激。

【问题讨论】:

  • 使用jwt.ms解析你的token并提供截图。
  • 好点卡尔......刚刚添加它
  • 您是否使用Auth0 organization提供的身份管理认证?
  • 这个我测试了很多次,我认为你没有使用OAuth 2.0标准化授权协议。
  • 在OAuth 2.0标准化授权协议中,如果你使用v1.0端点,你应该使用resource参数而不是audience参数,它不会识别该参数。只有 Auth0 组织会支持此参数。

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


【解决方案1】:

总之,我会把它作为答案发布。

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

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

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

【讨论】:

  • 如果发布的答案解决了您的问题,请单击复选标记将其标记为答案。这样做可以帮助其他人找到他们问题的答案。谢谢!
  • 感谢您的解释。我想我的问题是 Power Automate 只支持 OAuth0 谢谢
猜你喜欢
  • 2019-12-03
  • 2017-09-06
  • 2018-02-08
  • 2021-04-26
  • 2020-11-18
  • 2020-02-28
  • 2021-04-10
  • 2019-12-15
  • 1970-01-01
相关资源
最近更新 更多