从 validate-jwt 迁移到 validate-azure-ad-token 策略

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

我之前已经在很多项目中成功使用了

validate-jwt
策略。我想尝试一下新的
validate-azure-ad-token
政策。

我更改了其中一项政策:

<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/{{tenant-id}}/v2.0/.well-known/openid-configuration" />
    <required-claims>
        <claim name="azp" match="all">
            <value>{{portal-clientId}}</value>
        </claim>
    </required-claims>
</validate-jwt>

致:

<validate-azure-ad-token header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid." tenant-id="{{tenant-id}}">
    <client-application-ids>
        <application-id>{{portal-clientId}}</application-id>
    </client-application-ids>
</validate-azure-ad-token>

前者工作没有任何问题,但我就是无法让后者工作。上面两个策略片段中的命名值

portal-clientId
分别对应于应用程序注册和企业应用程序的 applicationId。

从前者可以看出,该值在

azp
声明中。从 jwt.ms 看来,这也应该是新政策的正确主张:

使用令牌的客户端的应用程序ID。应用程序可以自行运行或代表用户运行。应用程序 ID 通常代表应用程序对象,但它也可以代表 Azure AD 中的服务主体对象。

我已经阅读了介绍新功能的Azure文档文章,但我就是不知道我做错了什么。在追踪时,新政策有以下规定:

validate-azure-ad-token (3.470 ms)
{
    "message": "Azure AD JWT Validation Failed: ValidationFailed."
}

新政策是否还有一些隐性预期?我的代币发行人是

https://login.microsoftonline.com/{{tenant-id}}/v2.0

在连接到此 API 的应用程序洞察中查看日志不会产生比跟踪更有用的信息,即使在激活详细日志记录时也是如此。

任何帮助将不胜感激。

azure azure-active-directory jwt azure-api-management
2个回答
3
投票

(来源:我在 Azure API 管理团队工作,负责 APIM 策略实施)。

简短版本:恢复使用 validate-jwt(暂时)。

这里有两个问题。

  1. 您的两种说法并不等同。客户端应用程序 ID 在 JWT 中作为受众公开。您在 validate-azure-ad-token 版本上是正确的,在 validate-jwt 版本上是错误的。
  2. 当前存在一个错误(我们正在处理并将“很快”修复),即我们用于 Azure Active Directory 的底层库未验证 v2.0 令牌。

0
投票
After spending more than 4 hours trying to figure the the correct Policy finally it works.
The policy should be as follows:-

  <validate-azure-ad-token tenant-id="521c22d3-fb21-4c0f-8ff6-*****">
            <audiences>
                <audience>api://29f66c25-56c9-474f-b298-******</audience>
            </audiences>
            <client-application-ids>
                <application-id>7d2e7430-bc1b-44e6-8f63-*****</application-id>
            </client-application-ids>
        </validate-azure-ad-token>

您可以从令牌中提取应用程序 ID 和受众,只需获取任何生成的令牌并对其进行解码即可。

© www.soinside.com 2019 - 2024. All rights reserved.