我有一些API(逻辑应用程序,函数),我想通过Azure API管理公开它们。它们工作正常,所以我决定添加OAuth2 autorization。
我一步一步地跟着https://learn.microsoft.com/fr-fr/azure/api-management/api-management-howto-protect-backend-with-aad:
- 在Azure AD中注册应用程序(后端应用程序)以表示API。
- 在Azure AD中注册另一个应用程序(客户端应用程序)以表示需要调用API的客户端应用程序。
- 在Azure AD中,授予权限以允许客户端应用调用后端应用。
- 将开发人员控制台配置为使用OAuth 2.0用户授权调用API。
- 添加validate-jwt策略以验证每个传入请求的OAuth令牌。
- 也可以使用Postman来测试
在“validate-jwt”策略步骤之前,一切都正常。当我添加它时,我得到一个“401 -未授权。访问令牌丢失或无效”。我可以在开发人员控制台和Postman中获得令牌,但只要我调用API... 401!
当我使用jwt.ms检查令牌的内容时,我注意到aud参数与后端应用程序ID无关。令牌中的值是“00000003-0000-0000-c 000 - 000000000000”,而后端应用程序ID类似于“16 caXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXc 0”。
我的想法用完了,需要一些AzureMaven的帮助!帮助将是非常感激的...
以下是根据MS文档的入站策略:
<policies>
<inbound>
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
<openid-config url="https://login.microsoftonline.com/MY_AD_TENANT_ID/.well-known/openid-configuration" />
<required-claims>
<claim name="aud">
<value>MY8BACKEND_APP_ID_GUID</value>
</claim>
</required-claims>
</validate-jwt>
</inbound>
<backend>
<forward-request />
</backend>
<outbound />
<on-error />
</policies>
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条答案
按热度按时间abithluo1#
几年前,我在验证Azure AD令牌时遇到了一些问题-请参阅我的write up。
我怀疑问题出在JWT头中的nonce。
vuktfyat2#
您并不一定要检查aud参数的值。您可以将
required-claims
一起移除,这样仍会验证权杖的存在和签章。如果您要确定权杖是针对您的应用程序发出,只要找出包含应用程序识别码的宣告,并在name="...”中使用它,以比对您的应用程序识别码值。5cg8jx4n3#
如果使用v2版本端点,请转到-〉Azure ad -〉应用程序注册-〉选择后端应用程序-〉清单-〉更新属性“accessTokenAcceptedVersion”:2、”