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

alen0pnh  于 2022-11-17  发布在  其他
关注(0)|答案(3)|浏览(148)

我有一些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

abithluo

abithluo1#

几年前,我在验证Azure AD令牌时遇到了一些问题-请参阅我的write up
我怀疑问题出在JWT头中的nonce。

vuktfyat

vuktfyat2#

您并不一定要检查aud参数的值。您可以将required-claims一起移除,这样仍会验证权杖的存在和签章。如果您要确定权杖是针对您的应用程序发出,只要找出包含应用程序识别码的宣告,并在name="...”中使用它,以比对您的应用程序识别码值。

5cg8jx4n

5cg8jx4n3#

如果使用v2版本端点,请转到-〉Azure ad -〉应用程序注册-〉选择后端应用程序-〉清单-〉更新属性“accessTokenAcceptedVersion”:2、”

相关问题