一、适合场景:

1、我方系统在集成到别人的集成本台时一般是拿别的平台的用户名,在我方系统进行登录

2、我方系统是前后端分离,前端要拿到token

二、解决方案:自定义授权类型

我们知道Identityserver4有四种授权类型:用户名密码授权不适合单点登录,因为拿不到密码;其它类型也不适合,因为拿不到用户信息。

1、继承IExtensionGrantValidator接口

public class UserNameGrantValidator : IExtensionGrantValidator{    public string GrantType => "username";    //1q2w3e* 进行sha256编码后结果    public string ClientSecret => "E5Xd4yMqjP5kjWFKrYgySBju6JVfCzMyFp7n2QmMrME=";    private readonly UserManager<Volo.Abp.Identity.IdentityUser> _usermanager;    private readonly IdentityUserManager _identityUserManager;    private readonly IConfiguration _configuration;    public UserNameGrantValidator(UserManager<Volo.Abp.Identity.IdentityUser> usermanager, IdentityUserManager identityUserManager, IConfiguration configuration)    {         _configuration = configuration;        _usermanager = usermanager;        this._identityUserManager = identityUserManager;    }    public Task ValidateAsync(ExtensionGrantValidationContext context)    {        var username = context.Request.Raw.Get("username");        var auth_code = context.Request.Raw.Get("client_key");        var authcodeconfig = _configuration["ClientAuthKey"];        if (string.IsNullOrEmpty(auth_code) || string.IsNullOrEmpty(authcodeconfig) || auth_code != authcodeconfig.Sha256())        {            context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, "客户端授权码无效");            return Task.FromResult(1);        }        //var user = _userRepository.FirstOrDefaultAsync(x => x.Name == username);        var user = _usermanager.FindByNameAsync(username).Result;        if (user == null)        {            context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, "用户未注册");            return Task.FromResult(1);
}
//var claims = new List<Claim>(); //foreach (var itemClaim in user.Result.Claims) //{ // var claim = new Claim(itemClaim.ClaimType, itemClaim.ClaimValue); // claims.Add(claim); //}
context.Result = new GrantValidationResult( subject: user.Id.ToString(), authenticationMethod: GrantType); return Task.FromResult(0); }}

2、在AuthServerDataSeeder.cs文件中增加授权客户端

3、注入授权类型

在AuthServerHostModule.cs类下增加方法:

 public override void PreConfigureServices(ServiceConfigurationContext context)
{
context.Services.PreConfigure<IIdentityServerBuilder>(builder =>
{
builder.AddExtensionGrantValidator<UserNameGrantValidator>();
});
}

4、postman请求并拿到access_token

ABP-VNext 用户权限管理系统实战05----扩展授权类型(单点登录)的更多相关文章

  1. SpringSecurity权限管理系统实战—八、AOP 记录用户、异常日志

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  2. SpringSecurity权限管理系统实战—一、项目简介和开发环境准备

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  3. SpringSecurity权限管理系统实战—六、SpringSecurity整合jwt

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  4. SpringSecurity权限管理系统实战—二、日志、接口文档等实现

    系列目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战 ...

  5. SpringSecurity权限管理系统实战—四、整合SpringSecurity(上)

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  6. SpringSecurity权限管理系统实战—七、处理一些问题

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  7. SpringSecurity权限管理系统实战—九、数据权限的配置

    目录 SpringSecurity权限管理系统实战-一.项目简介和开发环境准备 SpringSecurity权限管理系统实战-二.日志.接口文档等实现 SpringSecurity权限管理系统实战-三 ...

  8. 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...

  9. Vue Abp vNext用户登录(Cookie)

    因为Abp vNext没找到Vue的模板,网上也没找到相关vNext的例子,只能自己试着写写,asp.net core abp vue都是刚学不久,所以很粗糙也可能有错误的地方,如果您看到请指正,谢谢 ...

  10. SpringSecurity权限管理系统实战—五、整合SpringSecurity(下)

    系列目录 前言 上篇文章SpringSecurity整合了一半,这次把另一半整完,所以本篇的序号接着上一篇. 七.自定义用户信息 前面我们登录都是用的指定的用户名和密码或者是springsecurit ...

随机推荐

  1. 补齐OLAP引擎短板!ByteHouse 是如何实现流批一体的?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   计算机领域一直流传一句话--"没有银弹",这句话出自计算机科学家布鲁克斯<没有银弹& ...

  2. Solon Aop 特色开发(3)构建一个Bean的三种方式

    Solon,更小.更快.更自由!本系列专门介绍Solon Aop方面的特色: <Solon Aop 特色开发(1)注入或手动获取配置> <Solon Aop 特色开发(2)注入或手动 ...

  3. 【HZERO】分支管理

    分支管理 分支类型 feature-[任务编号]-简单描述: 任务开发分支,针对迭代子任务建立的开发分支 bugfix :修复分支,用于缺陷修复. develop:开发分支,所有开发人员都可以提交代码 ...

  4. 《对线面试官》| 高频 Python 面试题 pt.1

    1.聊聊 python 中的值传递和引用传递吧 值传递: 值传递意味着在函数调用时,将实际参数的值复制一份传递给函数的形式参数 在函数内部,形式参数将作为局部变量使用,对形式参数的修改不会影响原始变量 ...

  5. Windows Tools | How To Install VS Microsoft C++ Build Tools on Windows

    This can be used for installing anything that requires C++ compiler on Windows. Installation steps D ...

  6. POJ 1236 Network of Schools (连通图 - Garbow 算法)

    POJ 1236 Network of Schools ​ 校园网:给定N所学校和网络,目标是分发软件其他学校都可收到,求①所需最少分发学校数:②若任选学校都能收到,最低新增边数. 思路:同一个强连通 ...

  7. L2-016 愿天下有情人都是失散多年的兄妹 (25分) (简单递归判断)

    L2-016 愿天下有情人都是失散多年的兄妹 (25分) 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一 ...

  8. 在vue项目中使用momentjs获取今日、昨日、本周、本月、上月、本年、上年等日期,时间比较计算

    https://blog.csdn.net/qq_15058285/article/details/119925056

  9. 关闭 cockpit 登陆提示

    sudo rm /etc/issue.d/cockpit.issue sudo rm /etc/motd.d/cockpit

  10. 基于AHB_BUS的eFlash控制器RTL

    eFlash控制器的RTL gvim 操作 gg -- 跳到首页 GG -- 按住shift,跳到尾部 ctrl+V --> 上下键选择行 --> shift+i -->输入 --& ...