在Api Management的validate-jwt中验证“scp”

时间:2018-03-29 14:32:35

标签: azure jwt azure-api-management

我正在尝试验证传入的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的消费者,这两个范围将是唯一传递的内容和特定顺序。

我需要做些什么来验证适当的范围?

1 个答案:

答案 0 :(得分:0)

在MSDN论坛上得到了微软某人的回答。

  

我建议你在策略中指定“分隔符”属性   声明以验证JWT令牌并查看它是否有帮助。更多   信息,你可以参考这个文件:   https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#ValidateJWT

     

Swikruti BoseMicrosoft-MSFT(MSFT CSG)

当我第一次看文档时,我完全忽略了分隔符属性。