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



我之前已经在很多项目中成功地使用了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。女士,听起来这应该也是新保单的正确索赔:

使用令牌的客户端的应用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(目前)。

这里有两个问题。

  1. 你的两个语句不相等。客户机应用程序ID在JWT中作为受众公开。您在validate-azure-ad-token版本上是正确的,而在validate-jwt版本上是错误的。
  2. 目前有一个bug(我们正在修复,很快就会修复),我们用于Azure Active Directory的底层库无法验证v2.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和受众,只需取任何生成的令牌并解码它。

最新更新