Search code examples
c#angularasp.net-coreidentityserver4oidc-client

Get user roles from oidc client


I am using oidc-client for my authorization in my app using angular and asp net core 3.1

How can I get the user roles from asp net thru oidc client?


Solution

  • Identity:

    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