一、适合场景:

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. 火山引擎DataTester智能发布:助力产品降低功能迭代风险

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   对企业而言,应用大规模AB实验,可以帮助企业提高决策效率.降低试错成本,而近期火山引擎AB测试 DataTes ...

  2. Solon 在 jdk 各版本反射权限问题的处理指南

    jdk17 如果出现反射权限问题.可添加jvm参数:--add-opens (取消了 illegal-access 参数) #示例: java --add-opens java.base/java.l ...

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

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

  4. 非VIP用户下载限速,原来是这么实现的

    在日常工作之余,二狗子其实还是个隐藏的大触,一手素描画得出神入化,不少看过的小伙伴嗷嗷叫着求分享.为了让更多小粉丝能看到自己的作品,二狗子开发了一个提供有版权的素描稿件的下载网站. 二狗子的小网站,只 ...

  5. 最火前端Web组态软件(可视化)

    ​ 友情提示:本文为原创文章,转载请注明出处,商务合作请私信!!! 前言: 随着物联网.大数据等技术高速发展,我们逐步向数字化.可视化的人工智能(AI)时代的方向不断迈进.智能时代是工业 4.0 时代 ...

  6. SpringBoot 项目实战 | 瑞吉外卖 Day01

    一.软件开发整体介绍 1.软件开发流程 2.角色分工 项目经理:对整个项目负责,任务分配.把控进度 产品经理:进行需求调研,输出需求调研文档.产品原型等 UI设计师:根据产品原型输出界面效果图 架构师 ...

  7. #2037:今年暑假不AC

    Problem Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋!" & ...

  8. HDU-3032--Nim or not Nim?(博弈+SG打表)

    题目分析: 这是一个经典的Multi-SG游戏的问题. 相较于普通的Nim游戏,该游戏仅仅是多了拆成两堆这样的一个状态.即多了一个SG(x+y)的过程. 而根据SG定理,SG(x+y)这个游戏的结果可 ...

  9. springboot项目全局异常处理@ControllerAdvice(方式二)

    SpringMVC 中 @ControllerAdvice 注解的三种使用场景!   @ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义 ...

  10. 十五、跨主机通信overlay网络

    系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...