我正在尝试验证传入的JWT令牌是否具有范围“labresults.read”和“user_impersonation”。我做了以下政策摘录
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid JWT Token" require-signed-tokens="true">
<openid-config url="(snip)" />
<audiences>
<audience>(snip)</audience>
</audiences>
<required-claims>
<claim name="scp" match="all">
<value>labresults.read</value>
<value>user_impersonation</value>
</claim>
</required-claims>
</validate-jwt>
我传入了一个看似
的令牌{
"iss": "(snip)",
"exp": 1522334650,
"nbf": 1522331050,
"aud": "(snip)",
"sub": "(snip)",
"email": "(snip)",
"name": "Scott Chamberlain",
"scp": "labresults.read user_impersonation",
"azp": "(snip)",
"ver": "1.0",
"iat": 1522331050
}
当我从开发人员门户网站查看“尝试它”时,查看错误报告的跟踪
validate-jwt (648 ms){
"message": "JWT Validation Failed: Claim value mismatch: scp=labresults.read.."
}
我是否被迫使用
的单一声明<claim name="scp">
<value>labresults.read user_impersonation</value>
</claim>
我真的不愿意,因为我不想强迫这个api的消费者,这两个范围将是唯一传递的内容和特定顺序。
我需要做些什么来验证适当的范围?
答案 0 :(得分:0)
在MSDN论坛上得到了微软某人的回答。
我建议你在策略中指定“分隔符”属性 声明以验证JWT令牌并查看它是否有帮助。更多 信息,你可以参考这个文件: https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#ValidateJWT
Swikruti BoseMicrosoft-MSFT(MSFT CSG)
当我第一次看文档时,我完全忽略了分隔符属性。