我正在 Azure API 管理中使用策略片段来使我的策略可重用。 其中一个策略片段使用
validate-azure-ad-token
策略验证请求中的身份验证令牌。
片段如下所示:
<fragment>
<validate-azure-ad-token tenant-id="<my tenant id>">
<audiences>
<audience>@(context.Variables.GetValueOrDefault<string>("Audience"))</audience>
</audiences>
<required-claims>
<claim name="roles" match="all">
<value>@(context.Variables.GetValueOrDefault<string>("Role"))</value>
</claim>
</required-claims>
</validate-azure-ad-token>
</fragment>
在我的 API 策略中,我首先设置上下文变量,然后包含片段:
<set-variable name="Audience" value="{{Audience-Named-Value}}" />
<set-variable name="Role" value="{{Role-Named-Value}}" />
<include-fragment fragment-id="ValidateOAuthFragment" />
执行此操作时,我收到 401 响应,并显示以下错误:
Invalid Azure AD JWT
。
奇怪的是,当我在片段中明确为受众使用我的命名值时,策略成功了。所以 <audience>{{Audience-Named-Value}}</audience>
有效。但是,这当然不是我想要的,因为我想动态设置受众。 角色的部分确实有效并且没有出现任何问题。我确实有一个解决方法,那就是使用
validate-jwt
政策。在那里我可以为受众使用上下文变量,但我想知道为什么
validate-azure-ad-token
不喜欢它。有什么想法/建议吗?
我确实有一个解决方法,那就是使用看起来元素
validate-jwt
政策。在那里,我可以为受众使用上下文变量,但我想知道为什么validate-azure-ad-token
不喜欢它。
audiences
{{}}
,但根据 Validate-azure-ad-token 策略元素,允许策略表达式。所以我为此创建了一个github问题。
目前,您可以使用命名值在策略片段中动态传递值,而不是将其分配给set-variable。
<fragment>
<validate-azure-ad-token tenant-id="<tenant id>">
<audiences>
<audience>{{Audience-Named-Value}}</audience>
</audiences>
</validate-azure-ad-token>
</fragment>
效果很好。
如果您仍然想传递上下文参数中的值,那么我建议您使用
validate-jwt