继续介绍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(三)使用用户名和密码相关推荐

  1. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...

    SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...

  2. 密码学读书笔记系列(三):《商用密码应用与安全性评估》

    密码学读书笔记系列(三):<商用密码应用与安全性评估> 思考/前言 第1章 密码基础知识 1.1 密码应用概述 1.2 密码应用安全性评估(密评)的基本原理 1.3 密码技术发展 1.4 ...

  3. NVIDIA AGX xavier系列,三分钟教你刷盒子(保姆级教程)

    一.接线 注意:新盒子开启不要其他操作 二.使盒子进入REC模式进行刷机 按住盒子中间键1秒,同时再按住开机键,type c上面的灯亮,证明进入rec模式. 三.参照师兄 <NVIDIA AGX ...

  4. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  5. 程序员之网络安全系列(三):数据加密之对称加密算法

    系列目录: 程序员之网络安全系列(一):为什么要关注网络安全? 程序员之网络安全系列(二):如何安全保存用户密码及哈希算法 程序员之网络安全系列(三):数据加密之对称加密算法 程序员之网络安全系列(四 ...

  6. WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放、播放、暂停、可拖动播放进度效果实现...

    WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果实现 原文:WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)

    基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三) 转载于:https://github.com/Meowv/Blog 上一篇完成了博客的主题切换,菜单和 ...

  8. spring boot 入门_SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作

    SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作 一.概述 多数据源,就是有多个数据库的配置. 多数据源配置并不麻烦,使用起来和单数据源基本相同,但是,重要的是事务的控制 ...

  9. NJ4X源码阅读分析笔记系列(三)—— nj4x-ts深入分析

    NJ4X源码阅读分析笔记系列(三)-- nj4x-ts深入分析 一.系统的工作流程图(模块级) 其工作流程如下(以行情获取为例): 应用端向Application Server发起连接 应用服务器调用 ...

最新文章

  1. 牛客网练习赛44-B(快速幂+模拟)
  2. oracle update from多表性能优化一例
  3. Google仍鸡蛋[DP]
  4. oracle job如何执行存储过程,oracle定时执行存储过程的job
  5. flash php socket通信_php socket通信机制实例说明
  6. linux C 学习 简单字符串逆序输出
  7. 异常处理:Jurisdiction policy files are not signed by trusted signers!
  8. 机器学习预测港股打新收益
  9. 阿里妈妈大规模在线分层实验实践
  10. git tag 使用方法(打标签、发布及回滚)
  11. VC++ 各个版本(2005 2008 2010 2012 2013 2015 2017)的运行库下载
  12. Github爆款!Aura v2.0.0正式版来了…
  13. HDFS加密存储(HDP、Ranger、Ranger KMS实现)
  14. QQ音乐外链html,QQ音乐Mp3外链设计办法
  15. 计算机如何安装无线网络适配器,无线网卡驱动怎么安装?电脑无线网卡驱动2种安装方法...
  16. 反映百度引擎权重的身分都有哪些
  17. codevs1069 关押罪犯
  18. 运动装备什么牌子好?运动装备品牌排行榜推荐
  19. robotframework调用python类方法_【RF基础】RF调用Python函数基础
  20. php发送 日历邮件_如何阻止垃圾邮件发送者攻击您的Google日历

热门文章

  1. 浅谈ASP中Web页面间的数据传递
  2. Mircosoft 正式把Windows Mobile改名为Windows Phone,你会因此而购买Windows Phone吗?
  3. docker swarm的应用----docker集群的构建
  4. laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy
  5. http协议--笔记
  6. event.x,event.clientX,event.offsetX区别
  7. plex实现流媒体服务器_如何从Plex Media Server离线查看下载和同步媒体
  8. html5结构与表现分离原则,网页简单布局之结构与表现原则分享
  9. 在数据库插入带小数点数据的问题
  10. js中关于Blob对象的介绍与使用