我之前已经在很多项目中成功使用了
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 API 管理团队工作,负责 APIM 策略实施)。
简短版本:恢复使用 validate-jwt(暂时)。
这里有两个问题。
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 和受众,只需获取任何生成的令牌并对其进行解码即可。