从OIDC客户端获取用户角色

时间:2020-06-01 03:39:38

标签: c# angular asp.net-core identityserver4 oidc-client

我正在使用oidc-client在我的应用程序中使用angular和asp net core 3.1进行授权

如何从asp net到oidc客户端获取用户角色?

1 个答案:

答案 0 :(得分:1)

身份:

public class ProfileService : IProfileService
    {
        protected UserManager<ApplicationUser> mUserManager;

        public ProfileService(UserManager<ApplicationUser> userManager)
        {
            mUserManager = userManager;
        }

        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
            ApplicationUser user = await mUserManager.GetUserAsync(context.Subject);

            IList<string> roles = await mUserManager.GetRolesAsync(user);

            IList<Claim> roleClaims = new List<Claim>();
            foreach (string role in roles)
            {
                roleClaims.Add(new Claim(JwtClaimTypes.Role, role));
            }

            context.IssuedClaims.AddRange(roleClaims);
        }

        public Task IsActiveAsync(IsActiveContext context)
        {
            return Task.CompletedTask;
        }
    }

Startup.cs:

...

services.AddDefaultIdentity<ApplicationUser>(options => options.User.RequireUniqueEmail = true)
                .AddRoles<IdentityRole>()
                .AddEntityFrameworkStores<ApplicationDbContext>();

services.AddIdentityServer()
                    .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

services.AddTransient<IProfileService, ProfileService>();

services.AddAuthentication()
                .AddIdentityServerJwt();

...

Angular oidc-client:

enter image description here