微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 ASP.NET Core 授权中,如何检查应用程序或用户访问令牌对同一控制器操作的权限?

如何解决在 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 举报,一经查实,本站将立刻删除。