多价值宣称
感谢应表示为JWT令牌里面阵列:
"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>
好的。这是来自微软的Azure AD B2C,它以我解释的格式生成scp“xxx.READ yyy.READ ...” – user1523812
哦,那不好。我会研究一下,谢谢报告。 –
它会很棒。我们计划在Azure AD B2C上使用新的“已发布范围”和“api访问”选项,即使目前我们还没有与目标范围相关的页面询问用户的同意。我试图使用你的例子,但它的失败与条件的错误。 Thx – user1523812