为什么策略片段中的 validate-azure-ad-token 与上下文变量不起作用

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

我正在 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
不喜欢它。

有什么想法/建议吗?

jwt azure-api-management policy
1个回答
0
投票
我确实有一个解决方法,那就是使用

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>
效果很好。

enter image description here

如果您仍然想传递上下文参数中的值,那么我建议您使用

validate-jwt

 策略作为稳定策略。

同时您可以参考github提出的问题来获取最新更新。

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