azure apim 中的 JWT 验证失败错误

问题描述 投票:0回答:2

我目前正在尝试使用以下文档实现 Oauth2.0 来保护 API

https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad

目前正在使用azure apim提供的DEMO CONFERENCE API来测试实现。

目前在开发者门户测试期间收到错误:

“message”:“JWT 验证失败:声明值不匹配:aud=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx..”

通过解码及其匹配来比较传递的令牌与声明值。

我的 jwt 令牌验证策略如下

<inbound>
        <base />
        <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid." require-expiration-time="false" require-signed-tokens="false">
            <openid-config url="https://login.microsoftonline.com/xxxxxxxxx-07c8-xxxxx-xxxx-xxxxxxxxx/.well-known/openid-configuration" />
            <required-claims>
                <claim name="aud" match="all" separator="-">
                    <value>xxxxxxxx-xxxxx-489e-a26e-xxxxxxxx</value>
                </claim>
            </required-claims>
        </validate-jwt>
</inbound>
azure api oauth-2.0 jwt apim
2个回答
5
投票

首先,您需要验证您的 JWT 令牌。然后,当我们注册应用程序时,它会注册到版本 V1,并且访问令牌颁发者附带 sts url,如果我们尝试使用 V2 传递访问令牌,则失败的 V2 颁发者是

login.microsoft.com

因此修复方法是进入 AD 中注册应用程序的清单文件

"accessTokenAcceptedVersion": 2
。请参阅此问题


0
投票

对我来说,解决方案是在策略配置中添加发行人:

portal config

更改后的代码:

<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="This call is not authorized">
            <openid-config url="https://login.microsoftonline.com/{tenant-id}/v2.0/.well-known/openid-configuration" />
            <issuers>
                <issuer>https://sts.windows.net/{tenant-id}/</issuer>
            </issuers>
</validate-jwt>
© www.soinside.com 2019 - 2024. All rights reserved.