IdentityServer 4 自定义身份校验/通过 token获取用户信息

Demo https://github.com/MartinAaron/data_collection

在这里插入图片描述

1、自定义身份校验

        public static IEnumerable<Client> GetClients(){return new List<Client>{//grant_type basicnew Client{ClientId = "xczx",AccessTokenLifetime = 36000,AllowedGrantTypes = GrantTypes.ClientCredentials,ClientSecrets ={new Secret("xczx".Sha256()),},AllowedScopes = {"api"}},// grant_type passwordnew Client(){ClientId = "client",AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,ClientSecrets ={new Secret("_123456".Sha256())},AllowedScopes ={"api", IdentityServerConstants.StandardScopes.OpenId,IdentityServerConstants.StandardScopes.Profile}}};}// ...//StartUp.csservices.AddScoped<IResourceOwnerPasswordValidator, ResourceOwnerPasswordValidator>();services.AddScoped<IProfileService, ProfileServices>();var builder = services.AddIdentityServer().AddInMemoryClients(Conf.GetClients()).AddInMemoryIdentityResources(Conf.GetIdentityResourceResources()).AddResourceOwnerValidator<ResourceOwnerPasswordValidator>().AddInMemoryApiResources(Conf.GetApiResources()).AddInMemoryApiScopes(Conf.ApiScopes).AddProfileService<ProfileServices>();

使用 ResourceOwnerPassword 类型 需要实现 IResourceOwnerPasswordValidator与IProfileService接口,进行业务密码验证与身份获取。

//ResourceOwnerPasswordValidatorpublic ResourceOwnerPasswordValidator(UserRepository userRepository){_userRepository = userRepository;}private readonly UserRepository _userRepository;public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context){var user = await _userRepository.GetListByField("account", context.UserName);if (user.Count == 0){context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,"账号输入错误");}else if (user.First().Password != context.Password.ToMD5String()){context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant,"密码错误");} else{context.Result = new GrantValidationResult(subject: context.UserName,authenticationMethod: OidcConstants.AuthenticationMethods.Password);} }
//ProfileServices
public ProfileServices(UserRepository userRepository)
{_userRepository = userRepository;
}private readonly UserRepository _userRepository;public async Task<List<Claim>> GetClaimsFromUserAsync(User user)
{var claims = new List<Claim>{new Claim(JwtClaimTypes.Id, user.Id.ToString()),new Claim(JwtClaimTypes.NickName, user.RealName),new Claim(type: JwtClaimTypes.Role, user.RoleId ?? ""),new Claim(type: JwtClaimTypes.Profile, user.DepartmentId ?? "")};await Task.CompletedTask;return claims;
}/// <summary>
/// http://localhost:5002/connect/userinfo
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{var userAccount = context.Subject.Claims.FirstOrDefault(c => c.Type == "sub").Value;var user = await _userRepository.GetListByField("account", userAccount);context.IssuedClaims = await GetClaimsFromUserAsync(user.First());
}public async Task IsActiveAsync(IsActiveContext context)
{var userAccount = context.Subject.Claims.FirstOrDefault(c => c.Type == "sub").Value;var user = await _userRepository.GetListByField("account", userAccount);context.IsActive = user.Any();
}

别忘记注入两个实现类

获取Token http://localhost:5002/connect/token

在这里插入图片描述

通过 access_token 获取用户信息
这里 token 不加 Bearer和空格
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25810.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序登录 + 基于token的身份验证

官方时序图如下&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 图里其实说的很清楚了&#xff0c;清理下流程&#xff1a; 1.前端调用wx.login()获取code值 2.前端通过调用wx.getUserInfo获取iv、rawData、signature、e…

Token:用户身份验证的令牌

一、Token是什么 Token&#xff0c;就是用户身份验证的令牌&#xff0c;代表执行某些操作的权利的对象&#xff0c;本质上是服务端生成的一串加密字符串、用于客户端进行请求的“令牌”。 当用户第一次使用账号密码成功登 陆后&#xff0c;服务器就生成一个token和token失效…

调用华为API实现身份证识别

调用华为API实现身份证识别 1、作者介绍2、调用华为API实现身份证识别2.1 算法介绍2.1.1OCR简介2.1.2身份证识别原理2.1.3身份证识别应用场景 2.2 调用华为API流程 3、代码实现3.1安装相关的包3.2代码复现3.3实验结果 1、作者介绍 雷千龙&#xff0c;男&#xff0c;西安工程大…

二十二、身份验证与权限

一、 准备工作 为了讲清楚身份验证与权限&#xff0c;我们再创建一个应用projects,设计模型如下&#xff1a; class Project(models.Model):name models.CharField(项目名称, max_length20, help_text项目名称)desc models.CharField(项目描述, max_length200, help_text项目…

人脸核身基础版 SDK 接入 > 合作方后台上送身份信息

文章目录 一、概述二、实现流程2.1. 获取获取 access_token2.2. 获取 SIGN ticket2.3. 生成签名2.4. 上送身份信息2.5. 获取 NONCE ticket 三、实战3.1. 获取获取 access_token3.2. 获取 SIGN ticket3.3. 生成签名3.4. 上送身份信息3.5. 获取 NONCE ticket 四、开源地址 一、概…

身份证验证接口API(仅需一行代码,公安部实时接口)

身份确认在互联网越来越普及&#xff0c;在二手、电商、贷款、交友、招聘等主流互联网应用中都有明确的刚需&#xff0c;传统的 身份证核验方式是用户上传身份证图片&#xff0c;客服后台人肉审核&#xff0c;但问题在于根本无从确认身份证的真实性&#xff0c;也不能确认该身份…

危!GPT将影响80%工作岗位,挣得越多越危险?OpenAI发布重磅研究

源&#xff5c;新智元 GPT-4发布没几天&#xff0c;OpenAI直接告诉所有人&#xff0c;GPTs是通用技术&#xff0c;80%的美国人的工作受到影响。想要保命&#xff0c;且看这34大「铁饭碗」。 前脚刚推出GPT-4&#xff0c;OpenAI后脚就发布了35页论文官宣&#xff1a; 80%的美国人…

音视频技术开发周刊 | 286

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 比尔盖茨&#xff1a;AI 时代开启 盖茨谈到AI如何改善人类的不平等现象&#xff0c;并在医疗、教育等方面做出贡献&#xff0c;但也存在风险。 GPT-4 Copilot X震撼来袭&a…

对话 ClickHouse CTO Alexey:目光不仅限于成为最快的数据库 | 近匠

作为世界上最快的 OLAP 列式数据库之一&#xff0c;ClickHouse 能在毫秒级的时间内处理数百亿行的数据。ClickHouse 公司在官网上&#xff0c;也是简单扼要地介绍了自己的数据库&#xff1a;“Fast”。 ClickHouse 的灵魂人物 AlexeybMilovidov&#xff0c;则是一位将“慢”践行…

马斯克放话:没有我就没有 OpenAI,连名字都是我起的!

整理 | 郑丽媛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 在 ChatGPT、GPT- 4 的爆火下&#xff0c;近来 OpenAI 这个名字已逐渐成为科技圈的“高频热词”&#xff0c;其创立初期与马斯克之间的“恩怨”也被时常提及。 有人说自从马斯克走后&#xff0c;Open…

阿里云版Chat-gpt申请内测

不允许你还不知道阿里云的chat-gpt&#xff0c;快去申请 -- 内测申请地址&#xff1a;通义千问

C++图像处理 -- 图像合成

阅读提示&#xff1a; 《C图像处理》系列以代码清晰&#xff0c;可读性为主&#xff0c;全部使用C代码。 《Delphi图像处理》系列以效率为侧重点&#xff0c;一般代码为PASCAL&#xff0c;核心代码采用BASM。 尽可能保持二者内容一致&#xff0c;可相互对照。 本文代码必须包括…

图像合成与图像融合

这一次我来给大家介绍一下图像合成与融合。 我们经常看到一些很奇妙的PS技术&#xff0c;例如下面这张&#xff0c;它把1928年的一位叫做Frankie Yale的黑帮老大被杀时的照片&#xff0c;与现在这栋房子的照片无缝融合在一起&#xff1a; 还有这张&#xff0c;将1945年柏林街道…

Chrome安装油猴插件详细教程

Chrome安装油猴插件详细教程 一、油猴安装方法 方法一&#xff1a;Google官方商店安装&#xff08;推荐&#xff0c;需要科学上网&#xff09; 方法二&#xff1a;本地安装&#xff08;无需科学上网&#xff0c;不会科学上网的适用&#xff09; 二、安装油猴插件 方法一&am…

Tampermonkey 油猴脚本,chrome插件

tampermonkey脚本是一款在谷歌浏览器上经常使用到的浏览器脚本插件&#xff0c;油猴脚本不仅为用户提供了大量的免费脚本插件外&#xff0c;而且还可以帮助你对这些脚本插件进行统一管理&#xff0c;当有最新版本的脚本推出的时候&#xff0c;它会帮助你进行自动更新。当然&…

手机上使用油猴插件 Tampermonkey

油猴 即 Tampermonkey中文名俗称油猴&#xff0c;是一款浏览器上的扩展&#xff0c;用户可以通过Tampermonkey添加和使用脚本&#xff0c;而脚本是一种可以修改网页JavaScript的程序。 在PC端&#xff0c;可以通过 Chrome浏览器的扩展程序&#xff0c;再结合 脚本 可以实现各种…

Tampermonkey油猴插件安装使用

Tampermonkey油猴插件安装使用 Tampermonkey油猴插件——安装与使用教程 Tampermonkey的crx文件&#xff0c;将下载下来的压缩包解压出来&#xff0c;其中类型为CRX文件 就是接下来需要用到的安装文件 打开浏览器设置&#xff0c;打开扩展程序页面&#xff0c;或者直接搜索Chr…

关于油猴(Tampermonkey)

油猴Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c;它适用于多款常见的浏览器。 前言 那么&#xff0c;油猴具体能干啥&#xff1f; 它可以让我们使用浏览器时更加便捷。 比如说&#xff0c;对于一些网页限制的解除&#xff0c;某度盘文件直接…

Tampermonkey油猴插件——安装与使用教程

安装步骤&#xff1a; Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c;它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。 油猴插件下载网址&#xff1a;Tampermonkey • Home Beta是测试版&#xff1b; Stable是稳定版&am…

安装油猴(Tampermonkey)插件,让你的浏览器更强大

插件是什么 插件及扩展程序&#xff0c;目前大多数软件及程序都提供了安装插件的功能&#xff08;edge&#xff0c;chrome&#xff0c;vscode&#xff0c;pycharm&#xff0c;office等&#xff09;&#xff0c;游戏外挂也是一种插件&#xff0c;这也是使程序功能强大的手段&…