gpt4 book ai didi

api - Azure API 管理 : validate jwt token scope

转载 作者:行者123 更新时间:2023-12-05 09:18:25 26 4
gpt4 key购买 nike

我们想使用 validate-jwt 策略保护 API 操作调用,但是当我使用 required-claims 检查范围时遇到问题。示例:我有一个 token ,其范围包括多个值,例如“xxx.READ xxx.WRITE yyy.READ yyy.WRITE ...”对于特定操作,我想使用 validate-jwt 策略来检查 token 是否包含链接的范围:

    <required-claims>
<claim name="scp" match="any">
<value>xxx.READ</value>
</claim>
</required-claims>

但由于 scp 中的多个值,验证总是失败...我如何检查此声明?我必须先提取 scp 值吗?如果是,我该怎么做?

提前致谢

最佳答案

多值声明应表示为 JWT token 内的数组:

"scp": ["xxx.READ", "xxx.WRITE", "yyy.READ", "yyy.WRITE"]

您发布的策略配置完全支持这种情况。

但是如果您将它们表示为单个字符串(“xxx.READ xxx.WRITE yyy.READ yyy.WRITE”),那么您必须使用手动表达式来验证此类标记,大致如下:

<choose>
<when condition="@(context.Request.Headers.ContainsKey("Authorization"))">
<set-variable name="token" value="@(context.Request.Headers.GetValueOrDefault("Authorization", string.Empty).AsJwt())" />
<choose>
<when condition="@{
if (context.Variables["token"] == null) {
return false;
}

var scp = ((Jwt)context.Variables["token"]).Claims.GetValueOrDefault("scp", (string[])null);
if (scp == null || scp.Length == 0) {
return false;
}

return scp.Any(c => c.Contains("xxx.READ"));
}">
<return-response response-variable-name="existing response variable">
<set-status code="401" reason="Unauthorized" />
</return-response>
</when>
</choose>
</when>
<otherwise>
<return-response response-variable-name="existing response variable">
<set-status code="401" reason="Unauthorized" />
</return-response>
</otherwise>
</choose>

关于api - Azure API 管理 : validate jwt token scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44539958/

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