首页 > 其他分享 >ABP的IdentityServer4中使用自定义的claim声明

ABP的IdentityServer4中使用自定义的claim声明

时间:2023-02-06 17:22:15浏览次数:41  
标签:claim 自定义 Claim userManager ABP user context var new

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

 

标签:claim,自定义,Claim,userManager,ABP,user,context,var,new
From: https://www.cnblogs.com/wl-blog/p/17096031.html

相关文章

  • abp 自定义token
    如何删除访问令牌中未使用的声明?ABP框架版本: v5.2.2用户界面类型:角度数据库提供者:EFCore分层(MVC)或身份服务器分离(角度):是/否异常消息和堆栈跟踪:重现问......
  • 一文搞懂工作流审批(Java+activiti)快速开发+自定义工作流配置
    前言activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。一、项目形式springboot......
  • MySQL5.x msi自定义安装教程_也适用于8.x版本
    下载都会就跳过1、打开安装程序2、选择自定义安装方式3、选择要安装的MySQL版本4、承接3选择自定义安装路径和数据存储路径5、检查文件完整性6、无脑Next7、配置项作为服务......
  • 【微信小程序-原生开发】实用教程07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部
    开始前,请先完成成员页的开发,详见【微信小程序-原生开发】实用教程06-轮播图、分类页签tab、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片......
  • vue cli脚手架 - 删除配置好的自定义预配置
    在系统盘用户根目录里找到 .vuerc文件  编辑文本,删除不要的配置即可  删掉后,我就剩下一个了 ......
  • Cesium通过自定义着色器实现倾斜压平
    实现原理PS:使用customShader实现倾斜压平,没改源码获取模型的顶点数据后转以模型中心点的局部坐标系下(这里把所有点数据都在统一的局部坐标系下处理)把绘制的范围转为模......
  • MMLab中自定义模块初始化方法
    这方面好像介绍的少,看了下基本原理,下面介绍下如何在搭载权重的模型中加入自定义模块时方便的进行初始化。MMLab的逻辑时对每个部分进行初始化,若此部分定义了初始化方法为P......
  • tp5.x 自定义错误页
    thinkphp5自定义错误页面,话不多说,直接上干货1.关闭所有app_debug,即把 'app_debug'=>true修改为'app_debug'=>false2.在config.php(tp5.1config目录app.php)中配......
  • qtableview及自定义model的使用,对比qtablewidget性能及内存优化(转)
    以前一直使用qtableiwdget,最近有时间来研究下qtableview,才知道,qtableview和自定义model,比qtablewidget的性能啊,及占用内存啊,优化太多了。以前我使用qtablewidget是进行动态......
  • zabbix自定义监控项
    有时候当我们监控的项目在zabbix预定义的key中没有定义时,这时候我们可以通过编写zabbix的用户参数的方法来监控我们要求的项目item。形象一点说zabbix代理端配置文件中的U......