【问题标题】:Validate JWT Policy Per Operation or All Operations验证每个操作或所有操作的 JWT 策略
【发布时间】:2021-05-04 12:30:01
【问题描述】:
我目前在 Azure APIM 中有一个包含多个操作的 API 设置。
我在 All Operations 部分实施了 JWT Bearer 身份验证策略。
我现在需要做的是根据我的令牌中返回的范围实现每个操作的授权部分。我看过这个例子,明白该怎么做API Authorization Restriction
但是,尝试在根所有操作上实施策略,然后在该策略中检查所请求的操作并编写代码以匹配正确的操作范围,这是好的还是坏的做法。
或者应该为每个操作复制/粘贴 JWT 策略,然后只有操作授权逻辑存在。
提前致谢。
【问题讨论】:
标签:
jwt
azure-api-management
【解决方案1】:
因此,您可以在 Global、Product、API 和精细操作级别应用策略。
然后将这些政策一起评估,以形成针对您的请求的有效政策。
我最终做的是在 All Operations 应用 validate-jwt 政策
等级。这意味着对于我的 API 中的任何操作,我的令牌都将通过身份验证。
<policies>
<inbound>
<base />
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Not authenticated, token invalid." output-token-variable-name="jwt">
<openid-config url="redacted" />
<audiences>
<audience>redacted</audience>
</audiences>
<issuers>
<issuer>redacted</issuer>
</issuers>
</validate-jwt>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
然后,我使用choose when 策略检查我的 JWT 令牌中的范围参数,将策略添加到操作中以执行授权。您需要确保将其添加到 <base/> 策略元素之后。
<policies>
<inbound>
<base />
<choose>
<when condition="@(!((Jwt)context.Variables["jwt"]).Claims.GetValueOrDefault("scope").Contains("read:user"))">
<return-response>
<set-status code="403" reason="Forbidden" />
</return-response>
</when>
</choose>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>