【One by One系列】IdentityServer4(三)使用用户名和密码
继续介绍IdentityServer4,我们上篇介绍了IdentityServer4实现OAuth2.0的授权方式之一的客户端凭证,接下来我们继续介绍OAuth2.0的另外一种授权方式密码式,Resource Owner Password Credentials。
post请求
token?grant_type=password&username=USERNAME&password=PASSWORD&client_id=CLIENT_ID&client_secret=secret
从上面url的querystring参数就可以看出来,这里主要就是需要提供用户的用户名和密码,这个在传统的项目还是比较常见
web后台管理系统
C/S客户端
1.更新IdentityServer
由于上篇【One by One系列】IdentityServer4(二)使用客户端凭证(Client Credentials)保护API资源已经创建的IdentityServer项目,我们只需要IdentityServer4中注册用户和添加新的客户端。
1.1 注册用户
客户端凭证是没有用户参与的,但是密码式不同,需要用户输入用户名和密码,自然就需要用户数据。当然这块内容就属于OpenID Connect了,因为这跟身份认证相关。
我们在Config.cs里面增加用户数据
public static List<TestUser> TestUsers =>new List<TestUser>{new TestUser(){SubjectId="1",Username="admin",Password="admin123456!",Claims={ new Claim(JwtClaimTypes.Name,"RandyField"),new Claim(JwtClaimTypes.GivenName,"Randy"),new Claim(JwtClaimTypes.FamilyName,"Field"),new Claim(JwtClaimTypes.Email,"xxx@qq.com"),new Claim(JwtClaimTypes.EmailVerified,"true",ClaimValueTypes.Boolean),new Claim(JwtClaimTypes.WebSite,"http://www.randyfield.cn"),new Claim(JwtClaimTypes.FamilyName,"Randy"),new Claim(JwtClaimTypes.Address,$@"四川省成都市高新区")} }};
1.2 注册身份资源
代码如下:
public static IEnumerable<IdentityResource> IdentityResources =>new IdentityResource[]{//必须要添加,否则报无效的scope错误new IdentityResources.OpenId(),new IdentityResources.Profile()};
1.3 注册新客户端
代码如下:
public static IEnumerable<Client> Clients =>new Client[]{new Client{ClientId = "client app",// no interactive user, use the clientid/secret for authenticationAllowedGrantTypes = GrantTypes.ClientCredentials,// secret for authenticationClientSecrets ={new Secret("secret-123456".Sha256())},// scopes that client has access toAllowedScopes = { "api1" }},//Resource Owner Password Credentials Clientnew Client{ClientId="client pwd",AllowedGrantTypes=GrantTypes.ResourceOwnerPassword,ClientSecrets={new Secret("secret-654321".Sha256())},AllowedScopes={ "api1",IdentityServerConstants.StandardScopes.OpenId,IdentityServerConstants.StandardScopes.Profile }},};
这里客户端AllowedScopes除了api资源,还额外指定了用户Identity资源
2.创建客户端
这里我们依然使用上篇的中的客户端控制台程序,只是增加代码,模拟密码式授权
2.1 编码-请求Idisconvery endpoint
略,与上篇相同
2.2 编码-请求access token
// request tokenvar tokenResponse1 = await client.RequestPasswordTokenAsync(new PasswordTokenRequest{Address = disco.TokenEndpoint,ClientId = "client pwd",//ClientId = "client",ClientSecret = "secret-654321",Scope = "api1 openid profile",UserName= "admin",Password= "admin123456!"});if (tokenResponse1.IsError){Console.WriteLine(tokenResponse1.Error);return;}
RequestClientCredentialsTokenAsync
更换为RequestPasswordTokenAsync
请求参数
ClientCredentialsTokenRequest
更换为PasswordTokenRequest
其中的用户名和密码,就是在
IdentityServer
注册的用户ClientId与ClientSecret就不赘述了
Scope
指明了api资源和Identity资源
3.测试
启动IdentityServer
cd .\IdentityServer\
dotnet run
启动webapi
cd .\webapi\
dotnet run
用vs启动client
3.1 获取access-token
我们通过http://jwt.calebb.net/解析
3.2 调用api
3.3 获取身份信息
调用userinfo端点,获取身份信息
【One by One系列】IdentityServer4(三)使用用户名和密码相关推荐
- python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...
SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...
- 密码学读书笔记系列(三):《商用密码应用与安全性评估》
密码学读书笔记系列(三):<商用密码应用与安全性评估> 思考/前言 第1章 密码基础知识 1.1 密码应用概述 1.2 密码应用安全性评估(密评)的基本原理 1.3 密码技术发展 1.4 ...
- NVIDIA AGX xavier系列,三分钟教你刷盒子(保姆级教程)
一.接线 注意:新盒子开启不要其他操作 二.使盒子进入REC模式进行刷机 按住盒子中间键1秒,同时再按住开机键,type c上面的灯亮,证明进入rec模式. 三.参照师兄 <NVIDIA AGX ...
- axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...
- 程序员之网络安全系列(三):数据加密之对称加密算法
系列目录: 程序员之网络安全系列(一):为什么要关注网络安全? 程序员之网络安全系列(二):如何安全保存用户密码及哈希算法 程序员之网络安全系列(三):数据加密之对称加密算法 程序员之网络安全系列(四 ...
- WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放、播放、暂停、可拖动播放进度效果实现...
WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果实现 原文:WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的主题切换,菜单和 ...
- spring boot 入门_SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作
SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作 一.概述 多数据源,就是有多个数据库的配置. 多数据源配置并不麻烦,使用起来和单数据源基本相同,但是,重要的是事务的控制 ...
- NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析
NJ4X源码阅读分析笔记系列(三)-- nj4x-ts深入分析 一.系统的工作流程图(模块级) 其工作流程如下(以行情获取为例): 应用端向Application Server发起连接 应用服务器调用 ...
最新文章
- 牛客网练习赛44-B(快速幂+模拟)
- oracle update from多表性能优化一例
- Google仍鸡蛋[DP]
- oracle job如何执行存储过程,oracle定时执行存储过程的job
- flash php socket通信_php socket通信机制实例说明
- linux C 学习 简单字符串逆序输出
- 异常处理:Jurisdiction policy files are not signed by trusted signers!
- 机器学习预测港股打新收益
- 阿里妈妈大规模在线分层实验实践
- git tag 使用方法(打标签、发布及回滚)
- VC++ 各个版本(2005 2008 2010 2012 2013 2015 2017)的运行库下载
- Github爆款!Aura v2.0.0正式版来了…
- HDFS加密存储(HDP、Ranger、Ranger KMS实现)
- QQ音乐外链html,QQ音乐Mp3外链设计办法
- 计算机如何安装无线网络适配器,无线网卡驱动怎么安装?电脑无线网卡驱动2种安装方法...
- 反映百度引擎权重的身分都有哪些
- codevs1069 关押罪犯
- 运动装备什么牌子好?运动装备品牌排行榜推荐
- robotframework调用python类方法_【RF基础】RF调用Python函数基础
- php发送 日历邮件_如何阻止垃圾邮件发送者攻击您的Google日历
热门文章
- 浅谈ASP中Web页面间的数据传递
- Mircosoft 正式把Windows Mobile改名为Windows Phone,你会因此而购买Windows Phone吗?
- docker swarm的应用----docker集群的构建
- laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy
- http协议--笔记
- event.x,event.clientX,event.offsetX区别
- plex实现流媒体服务器_如何从Plex Media Server离线查看下载和同步媒体
- html5结构与表现分离原则,网页简单布局之结构与表现原则分享
- 在数据库插入带小数点数据的问题
- js中关于Blob对象的介绍与使用