ABP的IdentityServer4中使用自定义的claim声明
ABP的IdentityServer4使用自定义的claim声明,我是想增加一个部门Id,登录用户的中文名称 在 IdentityServer 项目的AbpModule中, context.Services.AddScoped<IProfileService, ProfileServices>(); //context.Services // .GetObject<IdentityBuilder>() public class ProfileServices : IProfileService { private readonly UserManager<Volo.Abp.Identity.IdentityUser> _userManager; private readonly RoleManager<Volo.Abp.Identity.IdentityRole> _roleManager; public ProfileServices(IdentityUserManager userManager, IdentityRoleManager roleManager) { _userManager = userManager; _roleManager = roleManager; } public async Task<List<Claim>> GetClaimsFromUserAsync(Volo.Abp.Identity.IdentityUser user) { var claims = new List<Claim> { new Claim(JwtClaimTypes.Subject,user.Id.ToString()), new Claim(JwtClaimTypes.Name,user.UserName), new Claim(JwtClaimTypes.PreferredUserName,user.UserName) }; var role = await _userManager.GetRolesAsync(user); role.ToList().ForEach(f => { claims.Add(new Claim(JwtClaimTypes.Role, f)); }); if (!string.IsNullOrEmpty(user.NormalizedUserName)) { claims.Add(new Claim("NormalizedUserName", user.NormalizedUserName)); } claims.Add(new Claim("DeptId", "A00001")); claims.Add(new Claim("中文名称", "dacong")); return claims; } /// <summary> /// 获取用户Claims /// 用户请求userinfo endpoint时会触发该方法 /// http://localhost:5003/connect/userinfo /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task GetProfileDataAsync(ProfileDataRequestContext context) { var subjectId = context.Subject.Claims.FirstOrDefault(c => c.Type == "sub").Value; var user = await _userManager.FindByIdAsync(subjectId); context.IssuedClaims = await GetClaimsFromUserAsync(user); } /// <summary> /// 判断用户是否可用 /// Identity Server会确定用户是否有效 /// </summary> /// <param name="context"></param> /// <returns></returns> public async Task IsActiveAsync(IsActiveContext context) { var subjectId = context.Subject.Claims.FirstOrDefault(c => c.Type == "sub").Value; var user = await _userManager.FindByIdAsync(subjectId); context.IsActive = user != null; //该用户是否已经激活,可用,否则不能接受token /* 这样还应该判断用户是否已经锁定,那么应该IsActive=false */ } } ———————————————— 版权声明:本文为CSDN博主「大聪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/dacong/article/details/106166645
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)