我们有一个现有的数据库,需要使用IdentityServer4和.NET Core实现基于角色的访问控制。
我的问题是:
1 IdenityServer4是否支持RBAC?例如是通过范围声明吗?应该如何实施?
2我可以使用现有数据库吗?还是我必须创建一个新的数据库?
任何建议或代码示例都将不胜感激。
更新
我们实现了资源所有者密码授予类型和RBAC。
任何建议或指向代码示例的链接都将不胜感激。
答案 0 :(得分:0)
在Identity Server方面,您可以创建Profile Service,以使IDS4在颁发令牌时包含role
声明。
例如,如果使用ASP.NET Identity管理用户/角色,则可以创建配置文件服务,例如:
public class MyProfileService : IProfileService
{
public MyProfileService()
{ }
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var roleClaims = context.Subject.FindAll(JwtClaimTypes.Role);
List<string> list = context.RequestedClaimTypes.ToList();
context.IssuedClaims.AddRange(roleClaims);
return Task.CompletedTask;
}
public Task IsActiveAsync(IsActiveContext context)
{
// await base.IsActiveAsync(context);
return Task.CompletedTask;
}
}
并在Startup.cs中注册:
services.AddTransient<IProfileService, MyProfileService>();
在客户端,您应该从JWT令牌映射角色声明,并尝试在AddOpenIdConnect
中间件中的config下面进行操作:
options.ClaimActions.MapJsonKey("role", "role", "role");
options.TokenValidationParameters.RoleClaimType = "role";