gpt4 book ai didi

Azure APIM 根据两个不同的声明验证 JWT

转载 作者:行者123 更新时间:2023-12-03 04:56:50 24 4
gpt4 key购买 nike

我正在尝试在 Azure APIM 中创建一个策略,以根据两个不同的声明验证 JWT token (Azure AD token )。

我的 API 可以由其他应用程序或用户使用 - 它可以从用户上下文或应用程序上下文中调用。因此, token 可能包含“scp”声明,例如user_impersonation 或“roles”声明,例如 [ "CallApiAsAnApp"]

From the documentation ,我还没有找到任何方法来做到这一点。这是可能的还是我必须实现自定义代码才能在 API 级别执行此操作?保单中添加到“必需 claim ”中的任何 claim 都将成为强制性 claim 。在声明级别似乎没有任何“匹配任何”选项,只有值级别。

最佳答案

最后,我能找到解决问题的唯一方法是使用 Choose 元素而不是 validate-jwt 以及自定义代码(这是我希望避免的方式)。基本上,我将经过验证的 JWT token 保存到变量中,然后使用 if/elseif 来确定 token 是否可接受。下面的工作相关配置

<validate-jwt header-name="Authorization" failed-validation-httpcode="401" require-scheme="Bearer" output-token-variable-name="valid-jwt">
<openid-config url="https://login.microsoftonline.com/tenantid/v2.0/.well-known/openid-configuration" />
<issuers>
<issuer>https://sts.windows.net/tenantid/</issuer>
</issuers>
</validate-jwt>
<choose>
<when condition="@{
var jwt = (Jwt)context.Variables["valid-jwt"];
if(jwt.Claims.ContainsKey("roles")){
var roles = jwt.Claims["roles"];
return !Array.Exists(roles, element => element == "MyRoleName");
} else if (jwt.Claims.ContainsKey("scp")){
var scp = jwt.Claims["scp"];
return !Array.Exists(scp, element => element == "user_impersonation");
} else { return true; }
}">
<return-response>
<set-status code="401" reason="Unauthorized" />
</return-response>
</when>
<otherwise />
</choose>

关于Azure APIM 根据两个不同的声明验证 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67106906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com