【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端点,获取身份信息

长按二维码关注

点外卖,先领券

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

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

相关文章

【One by One系列】IdentityServer4(二)使用Client Credentials保护API资源

书接上回&#xff0c;我们将会正式开始介绍IdentityServer4。IdentityServer4是实现了OAuth2.0OpenId Connect两种协议的优秀第三方库,属于.net生态中的优秀成员。可以很容易集成至ASP.NET Core&#xff0c;颁发token。使用Id4基本步骤如下&#xff1a;**1.**在Startup.Configu…

使用 Avalonia 开发 UOS 原生应用

最近很火的是国产的操作系统 UOS 系统&#xff0c;这个系统现在存在的问题就是生态没搭建起来。作为 dotnet 开发者&#xff0c;可以通过很多不同方向的技术为 UOS 系统生态贡献应用&#xff0c;如 Xamarin 和 GTK# 或 wine 和 win32 应用&#xff0c;或 mono 和 WinForms 应用…

云原生那些顶级开源项目,你都用过哪些?

CNCF&#xff0c;英文全称为Cloud Native Computing Foundation&#xff0c;中文译为“云原生计算基金会”, 构建可持续生态系统&#xff0c;并围绕一系列高质量开源项目促进社区的发展&#xff0c;本文大概介绍下几个主要的项目。???? Kubernetes⭐ Star: 73.5k https://g…

2021年首届.NET线下沙龙上海站 - 2021 .NET Meetup in Shanghai

.NET Conf 2020 刚刚在苏州落下帷幕&#xff0c; .NET 开发者们的热情不减&#xff0c;来自五湖四海的朋友一起参加疫情之下的 .NET 盛会。2021年上海第一场线下活动就要来了&#xff0c;快来加入我们一起学习.NET 吧&#xff01;活动时间&#xff1a;2021年1月23日 13:00-18:0…

跟我一起学Redis之加个哨兵让主从复制更加高可用

前言主从复制的实现在上一篇已经分享过&#xff0c;虽然主从复制本身的确让读写分离更加高效&#xff0c;但是对于整体高可用存在很大的劣势&#xff1a;当主节点宕机了之后还需要人为重新进行主从关系配置&#xff1b;这不是开玩笑嘛&#xff0c;这样人为干预&#xff0c;故障…

智能实验室-全能优化(Guardio) 4.0.0.670 beta 8

怎样获取最新版本&#xff1f;□全新下载&#xff1a;全能优化(Guardio)&#xff1a;http://files.cnblogs.com/unruledboy/Guardio.Release.zip智能实验室&#xff0d; 全能优化(Guardio) 4.0.0.670 beta 8 更新记录&#xff1a; 1.添加&#xff1a;系统加速 之 系统速度&…

如何在 ASP.Net Core 中实现 健康检查

健康检查 常用于判断一个应用程序能否对 request 请求进行响应&#xff0c;ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态。ASP.Net Core 中的 健康检查 落地做法是暴露一个可配置的 Http 端口&#xff0c;你可以使用 健康检查 去做一个最简单的活性检…

【One by One系列】IdentityServer4(四)授权码流程

接下来我们介绍新内容,OAuth2.0叫做授权码(authorization code)&#xff0c;在OpenID Connect中则属于OpenId Connect Flow&#xff0c;称为授权码流程(Authorization Code Flow),这种方式主要场景&#xff1a;保密客户端&#xff0c;服务器端的web应用“例如asp.net core mvc,…

Nemuria UML架构图 第3次迭代. 重构

Nemuria UML架构图 第3次迭代. 重构

suse linux 文件只可读,SUSE LINUX下文件系统变只读的问题解决

现象产生&#xff1a;服务器在挂载SUSE LINUX的系统光盘安装一些系统自带的RPM包后&#xff0c;发现HOME目录文件系统变成只读模式。附图&#xff1a;原因分析&#xff1a;在系统加载光盘之前一切正常&#xff0c;加载后出现这样的问题。加载光盘时&#xff0c;使用了mount命令…

3个值得学习和练手的.net企业级开源项目,强烈推荐

WTM项目名称&#xff1a;WTM项目所用技术栈&#xff1a;wtm mvvm mvc aspnetcore dotnetcore react vue layui layui-admin element-ui ncc等项目简介&#xff1a;WalkingTec.Mvvm框架&#xff08;简称WTM&#xff09;是基于.net core的快速开发框架。支持Layui(前后端不分离),…

linux服务器数据同步,Linux服务器数据定期同步和备份方式

数据安全是做数据分析的人需要关注的一大问题。对于我们分析的关键数据、使用的关键脚本都需要定期备份。scp最简单的备份方式&#xff0c;就是使用cp (本地硬盘)或scp (远程硬盘)命令&#xff0c;给自己的结果文件新建一个拷贝;每有更新&#xff0c;再拷贝一份。具体命令如下&…

2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?

IEnumerator、IEnumerable这两个接口单词相近、含义相关&#xff0c;傻傻分不清楚。入行多年&#xff0c;一直没有系统性梳理这对李逵李鬼。最近本人在怼着why神的《其实吧&#xff0c;LRU也就那么回事》&#xff0c;方案1使用数组实现LRU&#xff0c;手写算法涉及这一对接口&a…

vs.Net2003无法打开或创建Web应用程序若干解决办法

昨天到今天搞了一整天,把人都要差点搞崩了! ,以后再也不能乱关机了,因为这次的大意,几乎所有的Net安装&#xff0c;调试问题都被我碰到了&#xff0c;还好&#xff0c;我一个个把他记录下来了&#xff0c;同时&#xff0c;在CSDN找了一些相关的解决方法&#xff0c;不敢独享&am…

linux管理Windows文件,Linux与Windows互传文件,用户组管理和用户管理

一、与Windows互传文件linux和windows互传文件&#xff0c;需要使用Xshell&#xff0c;Linux系统需要安装lrzsz包。yum install -y lrzsz //linux安装lrzsz包# sz a.txt //Linux端传输当前目录下的a.txt到windows# rz //windows端选择传输文件到Linux当前目前二、/etc/passwd和…

微软向Chromium贡献代码以优化浏览器滚动体验

喜欢就关注我们吧&#xff01;近日&#xff0c;微软为 Chromium 社区提交了一个新功能&#xff0c;用于解决以 Chromium 为内核的浏览器在 Windows 10 中滚动响应不够流畅的问题。据悉&#xff0c;Chrome 浏览器在访问某些网站并滚动时会出现抖动的情况&#xff0c;导致其在部分…

[C#.NET 拾遗补漏]14:使用结构体实现共用体

在 C 和 C# 编程语言中&#xff0c;结构体&#xff08;Struct&#xff09;是值类型数据结构&#xff0c;它使得一个单一变量可以存储多种类型的相关数据。在 C 语言中还有一种和结构体非常类似的语法&#xff0c;叫共用体&#xff08;Union&#xff09;&#xff0c;有时也被直译…

linux新建文件夹灰色,Ubuntu新建文件夹灰了

#问题描述&#xff1a;WIn10Ubuntu双系统&#xff0c;其中WIn10系统和Ubuntu的目录“/”和“/boot”在同一块固态中&#xff0c;剩余的其他文件都在另一块机械硬盘里面。在机械硬盘下的软件(E&#xff1a;&分区5)和文档(F&#xff1a;&分区6)盘中无法新建文件夹&#x…

使用 C# 9 的records作为强类型ID - 初次使用

强类型ID实体通常是整数&#xff0c;GUID或者string类型&#xff0c;因为数据库直接支持这些类型&#xff0c;但是&#xff0c;如果实体的ID的类型是一样的&#xff0c;比如都是整数的ID&#xff0c;这有可能会出现ID值传错的问题&#xff0c;看下边的示例。public void AddPro…