代码之家  ›  专栏  ›  技术社区  ›  Pingpong

使用IdentityServer4和.NET内核实现基于角色的访问控制

  •  0
  • Pingpong  · 技术社区  · 5 年前

    我们有一个现有的数据库,需要使用IdentityServer4和.NETCore实现基于角色的访问控制。

    我的问题是:

    1 IdenityServer4是否支持RBAC?e、 g.是否通过范围索赔?应该如何实施?

    2我可以使用现有数据库吗?或者我必须创建一个新的数据库吗?

    https://github.com/IdentityServer/IdentityServer4.Samples/tree/master/Quickstarts/7_EntityFrameworkStorage

    更新

    我们实现了资源所有者Passowrd授权类型和RBAC。

    任何建议或代码样本链接将不胜感激。

    1 回复  |  直到 5 年前
        1
  •  0
  •   Nan Yu    5 年前

    在Identity Server端,您可以创建 Profile Service 使IDS4包含 role 发行代币时索赔。

    如果示例,如果使用ASP.NET标识要管理用户/角色,可以创建配置文件服务,如:

    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;
        }
    }
    

    然后注册启动.cs:

    services.AddTransient<IProfileService, MyProfileService>();
    

    AddOpenIdConnect 中间件:

      options.ClaimActions.MapJsonKey("role", "role", "role");
      options.TokenValidationParameters.RoleClaimType = "role";