为了账号安全,请及时绑定邮箱和手机立即绑定

如何为 IdentityServer 4 中的不同角色返回不同的范围?

如何为 IdentityServer 4 中的不同角色返回不同的范围?

C#
ITMISS 2021-06-04 11:40:28
我正在使用 IdentityServer4 来保护我的 .net 核心应用程序。我想使用基于策略的授权这是我所做的一项政策的示例 options.AddPolicy("api.order.write", builder =>                builder.RequireScope(                    "app.write", "app.read", "app.order.read"));我想为不同的角色授予不同的范围。例如,具有角色 Viewer 的用户将只有 app.read 范围。因此,在登录请求期间,Web 客户端向身份发送请求,其中包含我们在应用程序中拥有的所有范围的列表,但它应该使用基于角色的范围来处理和返回令牌。我想我可以IProfileService在那里实现自定义并检查用户角色并添加带有范围的声明,但也许已经有解决方案了。你有什么想法 ?UPD:我创建了自定义IProfileService,我正在检查用户角色,然后设置像这样的特定范围列表                //removing existing scopes if such exist already                 context.IssuedClaims = context.IssuedClaims.Where(x => x.Type != "scope").ToList();                foreach (var scope in viewerScopes)                {                    context.IssuedClaims.Add(new Claim("scope", scope));                }但我仍然收到所有范围(不是每个角色),与 Web 客户端在登录请求期间发送的范围相同的列表。
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

您在这里混合了客户端授权(即 OAuth/OIDC 术语中的范围)和用户授权。

用户授权检查应该在 API/资源本身内部进行(并且基本范围检查发生之后),而不是在 IDS4 服务中在颁发令牌时进行。

https://leastprivilege.com/2016/12/16/identity-vs-permissions/


查看完整回答
反对 回复 2021-06-05
  • 1 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信