Azure API管理:使用Oauth2 401的授权给出“未经授权。访问令牌丢失或无效。”

时间:2019-12-17 15:49:32

标签: azure oauth-2.0 azure-api-management

我想通过Azure API管理公开一些API(逻辑应用程序,函数)。 它们工作正常,所以我决定添加OAuth2自动处理功能。

我一步一步来了https://docs.microsoft.com/fr-fr/azure/api-management/api-management-howto-protect-backend-with-aad

  • 在Azure AD中注册一个应用程序(后端应用程序)以表示API。
  • 在Azure AD中注册另一个应用程序(client-app)以表示需要调用API的客户端应用程序。
  • 在Azure AD中,授予权限以允许客户端应用程序调用后端应用程序。
  • 配置开发者控制台以使用OAuth 2.0用户授权来调用API。
  • 添加validate-jwt策略以为每个传入请求验证OAuth令牌。
  • 还使用Postman进行测试

一切正常,直到“ validate-jwt”策略步骤生效。 当我添加它时,我得到一个“ 401-未经授权。访问令牌丢失或无效。” 我可以在开发人员控制台和Postman中获得令牌,但是只要我执行API调用... 401!

当我使用jwt.ms检查令牌的内容时,我注意到 aud 参数与后端“应用程序ID”无关。 令牌中的值为“ 00000003-0000-0000-c000-000000000000”,而后端应用程序ID类似于“ 16caXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXcc0”。

我的想法不多了,需要一些Azure专家的帮助! 帮助将不胜感激...

在以下根据MS doc的入站策略:

UPDATE favorites 
SET favorited = not favorited
WHERE title="${recipe}"

Screen cap of the Postman screen where I get the token (this works, but then when I send the request --> 401)

Screen cap of aud param in jwt.ms

3 个答案:

答案 0 :(得分:0)

您实际上并不需要检查aud参数的值。您可以一起删除required-claims,这样仍然可以验证令牌的存在和签名。如果要确保已为您的应用程序颁发了令牌,只需找到包含应用程序ID的声明,然后在name =“ ...”中使用它即可与您的应用程序ID值进行匹配。

答案 1 :(得分:0)

几年前,我在验证Azure AD令牌时遇到了一些问题-请参阅我的write up

我怀疑问题是JWT标头中的随机数。我与Azure AD有点脱节-希望这能为您提供正确方向的指点。

答案 2 :(得分:0)

如果使用的是v2版本端点,请转到->天蓝色广告->应用注册->选择后端应用->清单->更新属性“ accessTokenAcceptedVersion”:2,“