我正在使用IdentityServer4来保护我的.net核心应用。我想使用Policy-Based Authorization
这是我做过的一项政策的例子
options.AddPolicy("api.order.write", builder =>
builder.RequireScope(
"app.write", "app.read", "app.order.read"));
我想为不同的角色授予不同的范围。例如,具有角色查看器的用户将只具有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客户端发送的范围相同的列表。
答案 0 :(得分:4)
您在此处混合客户端授权(即OAuth / OIDC用语中的范围)和用户授权。
用户授权检查应该在API /资源本身内部进行(在发生基本范围检查后),而不是在IDS4服务中发出令牌。
https://leastprivilege.com/2016/12/16/identity-vs-permissions/