• IdentityServer4实战:Token 中返回用户属性


    前言

    在前几篇的学习中,生成的 Token 中只有 sub 这一个用户属性,其他的 username、email、phone等用户属性均没有包含在内。在实际项目中又常常需要从 token 中取得 用户的 sex、head 等属性,本篇笔者将介绍一种添加自定义用户属性的方法,供笔友参考。

    IProfileService

    ids 4里面定义了一个IProfileService的接口用来获取用户的一些信息, 主要是为当前的认证上下文绑定claims。我们可以实现IProfileService从外部创建claim扩展到ids4里面。

    自定义 CustomerProfileService

    在 MicroShell.IdentityServer4.Server 项目新建 CustomerProfileService 类,实现 IProfileService 接口,编写业务代码。

    public class CustomerProfileService : IProfileService
        {
            protected readonly TestUserStore Users;
    
            /// <summary>
            /// 案例中用户使用的还是 Quickstart.UI 模板提供的用户,所以这里通过DI 容器取到用户资源
            /// </summary>
            /// <param name="users"></param>
            public CustomerProfileService(TestUserStore users)
            {
                Users = users;
            }
    
            public virtual Task GetProfileDataAsync(ProfileDataRequestContext context)
            {
                // 通过 用户id 找到用户
                var user = Users.FindBySubjectId(context.Subject.GetSubjectId());
                if (user != null)
                {
                    context.IssuedClaims.AddRange(user.Claims);
                }
    
                // 模拟一个用户属性
                context.IssuedClaims.Add(new System.Security.Claims.Claim("blogs", "https://limitcode.com/"));
    
                return Task.CompletedTask;
            }
             
            public async Task IsActiveAsync(IsActiveContext context)
            {
                context.IsActive = true;
            }
        }

    注入 CustomerProfileService

    PostMan 测试

    本文转载自:https://limitcode.com/detail/6070059591dfde22104dcf0e.html

  • 相关阅读:
    用AB对Webservice做压力测试
    web压力测试工具(小而精)
    让IIS支持10万并发
    数据库之间数据转换最快方法
    C#中执行Dos命令
    .NET 4.0中使用内存映射文件实现进程通讯
    HTML解析利器HtmlAgilityPack
    C#快速找出磁盘内的所有文件
    ORM for Net主流框架汇总与效率测试
    新浪微博基于MySQL的分布式数据库实践
  • 原文地址:https://www.cnblogs.com/limitcode/p/14639523.html
Copyright © 2020-2023  润新知