如何解决在 ASP.NET Core 授权中,如何检查应用程序或用户访问令牌对同一控制器操作的权限?
Microsoft 的 Identity Platform 上的 OAuth 实现将范围用于委派权限,将角色用于应用程序权限。我正在编写一个受保护的 Web API,它支持两种类型的访问令牌。
对于范围验证,我可以使用以下策略定义将 [Authorize(Policy = "HasTheScope")]
应用到我的控制器操作:
options.AddPolicy("HasTheScope",policy => policy.RequireClaim("scp","TheScope"));
对于角色验证,我可以应用具有以下策略定义的 [Authorize(Policy = "HasTheRole")]
:
options.AddPolicy("HasTheRole",policy => policy.RequireRole("TheRole"));
对于多个 [Authorize]
属性,必须满足所有这些属性,因此不可能简单地将这两个策略应用于操作。
允许针对应用请求(使用客户端凭据流创建的令牌)和代表用户的请求(使用授权代码流创建的令牌)访问我的控制器操作的最佳做法是什么?
解决方法
从逻辑上来说,感觉您需要查看传入的令牌并为客户端凭据流做不同的事情,其中不会有主题声明。
所以需要一个“或”条件,如果你想使用策略定义一个自定义的 - 查看 RequireAssertion 语法 - 这个 Curity guides article 有一些例子:
options.AddPolicy("lowRisk",policy =>
policy.RequireAssertion(context =>
context.User.HasClaim(claim =>
claim.Type == "risk" && Int32.Parse(claim.Value) < 50
)
)
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。