使用ROPC授权的托管Blazor WASM应用无法获取角色与名称声明
ROPC模式下无法获取name和role声明的问题
我已完成Resource Owner Password Credentials(ROPC)授权配置,随后按照微软官方指南配置了名称与角色声明。使用常规授权码模式(Authorization Code Grant)时一切正常,但切换到ROPC模式后,无法获取name或role声明。我们不采用客户端凭证模式(Client Credentials Grant)有特定业务原因。
ProfileService.cs代码
using IdentityModel; using Duende.IdentityServer.Models; using Duende.IdentityServer.Services; using System.Threading.Tasks; public class ProfileService : IProfileService { public ProfileService() { } public async Task GetProfileDataAsync(ProfileDataRequestContext context) { var nameClaim = context.Subject.FindAll(JwtClaimTypes.Name); context.IssuedClaims.AddRange(nameClaim); var roleClaims = context.Subject.FindAll(JwtClaimTypes.Role); context.IssuedClaims.AddRange(roleClaims); await Task.CompletedTask; } public async Task IsActiveAsync(IsActiveContext context) { await Task.CompletedTask; } }
Startup.cs(.NET6中对应Program.cs)代码
services.AddIdentityServer() .AddApiAuthorization<ApplicationUser, ApplicationDbContext>(options => { options.Clients.AddIdentityServerSPA("WebApplication4.Client", builder => { builder.WithRedirectUri("/authentication/login-callback"); builder.WithLogoutRedirectUri("/authentication/logout-callback"); }); //也可使用Duende.IdentityServer.Models.Client options.Clients.Add(new IdentityServer4.Models.Client { ClientId = "WebApplication4.Integration", AllowedGrantTypes = { GrantType.ResourceOwnerPassword }, //可使用Configuration.GetSection("MySecretValue").Value从appsettings.json获取值 ClientSecrets = { new Secret("MySecretValue".Sha256()) }, AllowedScopes = { "WebApplication4.ServerAPI", "openid", "profile" } }); }); services.AddTransient<IProfileService, ProfileService>(); JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Remove("role");
内容的提问来源于stack exchange,提问作者Ogglas
相关产品推荐
相关产品推荐

