IdentityServer4-从数据库获取User登录并对Claims授权验证(五)
本节将在第四节基础上介绍如何实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置。
一、新建Web API资源服务,命名为ResourceAPI
(1)新建API项目,用来进行user的身份验证服务。
(2)配置端口为5001
安装Microsoft.EntityFrameworkCore包
安装Microsoft.EntityFrameworkCore.SqlServer包
安装Microsoft.EntityFrameworkCore.Tools包
(3)我们在项目添加一个 Entities文件夹。
新建一个User类,存放用户基本信息,其中Claims为一对多的关系。
其中UserId的值是唯一的。
新建Claims类
继续新建 UserContext.cs
(4)修改startup.cs中的ConfigureServices方法,添加SQL Server配置。
完成后在程序包管理器控制台运行:Add-Migration InitUserAuth
生成迁移文件。
(5)添加Models文件夹,定义User的model类和Claims的model类。
在Models文件夹中新建User类:
新建Claims类:
做Model和Entity之前的映射。
添加类UserMappers:
类UserContextProfile:
(6)在startup.cs中添加初始化数据库的方法InitDataBase方法,对User和Claim做级联插入。
(7)在startup.cs中添加InitDataBase方法的引用。
运行程序,这时候数据生成数据库UserAuth,表Users中有一条UserName=zhubingjian,Password=123的数据。
二、实现获取User接口,进行身份验证
(1)先对API进行保护,在Startup.cs的ConfigureServices方法中添加:
并在Configure中,将UseAuthentication身份验证中间件添加到管道中,以便在每次调用主机时自动执行身份验证。
app.UseAuthentication();
(2)接着,实现获取User的接口。
在ValuesController控制中,添加如下代码:
好了,资源服务器获取User的接口完成了。
(3)接着回到AuthServer项目,把User改成从数据库进行验证。
找到AccountController控制器,把从内存验证User部分修改成从数据库验证。
主要修改Login方法,代码给出了简要注释:
可以看到,在IdentityServer4更新后,旧版获取tokenResponse的方法已过时,但我按官网文档的说明,使用新方法(注释的代码),获取不到信息,还望大家指点。
官网链接:https://identitymodel.readthedocs.io/en/latest/client/token.html
所以这里还是按老方法来获取tokenResponse。
(4)到这步后,可以把Startup中ConfigureServices方法里面的AddTestUsers去掉了。
运行程序,已经可以从数据进行User验证了。
点击进入About页面时候,出现没有权限提示,我们会发现从数据库获取的User中的Claims不起作用了。
三、使用数据数据自定义Claim
为了让获取的Claims起作用,我们来实现IresourceOwnerPasswordValidator接口和IprofileService接口。
(1)在AuthServer中添加类ResourceOwnerPasswordValidator,继承IresourceOwnerPasswordValidator接口。
(2)ProfileService类实现IprofileService接口:
(3)发现代码里面需要在ResourceAPI项目的ValuesController控制器中
添加根据UserId获取User的Claims的接口。
(4)修改AuthServer中的Config中GetIdentityResources方法,定义从数据获取的Claims为role的信息。
(5)在GetClients中把定义的mvc.profile加到Scope配置
(6)最后记得在Startup的ConfigureServices方法加上
.AddResourceOwnerValidator<ResourceOwnerPasswordValidator>()
.AddProfileService<ProfileService>();
运行后,出现熟悉的About页面(Access Token后面加上去的,源码上有添加方法)
本节介绍的IdentityServer4通过访问接口的形式验证从数据库获取的User信息。当然,也可以写成AuthServer授权服务通过连接数据库进行验证。
另外,授权服务访问资源服务API,用的是ClientCredentials模式(服务与服务之间访问)。
参考博客:https://stackoverflow.com/questions/35304038/identityserver4-register-userservice-and-get-users-from-database-in-asp-net-core
源码地址:https://github.com/Bingjian-Zhu/Mvc-HybridFlow.git
相关文章:
从Client应用场景介绍IdentityServer4(一)
IdentityServer4-EF动态配置Client和对Claims授权(二)
IdentityServer4-客户端的授权模式原理分析(三)
IdentityServer4-MVC+Hybrid实现Claims授权验证(四)
基于IdentityServer4 实现.NET Core的认证授权
IdentityServer4与ocelot实现认证与客户端统一入口
使用Dapper持久化IdentityServer4
原文地址: https://www.cnblogs.com/FireworksEasyCool/p/10181681.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
IdentityServer4-从数据库获取User登录并对Claims授权验证(五)相关推荐
- identity4使用mysql_IdentityServer4-从数据库获取User登录并对Claims授权验证(五)
本节将在第四节基础上介绍如何实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置. 一.新建Web API资源服务,命名为ResourceAPI (1)新建API ...
- Bootstrap4+MySQL前后端综合实训-Day06-AM【eclipse详细配置Tomcat、开发web项目、servlet、连接MySQL8.0数据库、用户登录界面的编写与验证、分页查询】
[Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目 录 eclipse重置视图 MySQL数据库--建数据库.建数据库 s ...
- cas返回mysql数据_单点登录 CAS 5.* - 从数据库获取用户信息 - 4
前面演示的项目 都是使用的固定用户,现在,可以尝试从数据库获取用户+密码尝试登录, 创建表和数据: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_I ...
- Amazon 中国区配置 PingIdentity 身份集成实现 Redshift 数据库群集单点登录
无疑使用单点登录 (SSO)访问组织中的多种应用程序能够提升用户体验 . 如果您负责为 Amazon Redshift 启用 SSO,则可以使用 ADFS.PingIdentity.Okta.Azur ...
- 数据库中用户登录注册用户信息表怎么设计如何设计
用户登录 站内登录:用户信息+密码的验证形式: 用户名+密码, 手机+密码, 站外授权:第三方登录, 其实它也是用户信息+密码的形式, 用户信息即第三方系统中的ID(第三方登录一定会给一个在他们系统中 ...
- Springboot集成SpringSecurity(获取当前登录人)
简言 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架.它是用于保护基于Spring的应用程序的实际标准. Spring Security是一个框架,致力于为Java应 ...
- Django之使用自定义用户表(AbstractUser)/自定义登录验证(jwt)/获取当前登录用户
基本步骤: 一.自定义用户表: 1.自定义的用户表继承AbstractUser: 2.settings.py添加配置,指向用户表:AUTH_USER_MODEL = 'myUser.Account'( ...
- java_后端获取当前登录用户信息
后端获取当前登录用户信息 开发过程中,发现有很多地方需要获取当前登录的用户信息,比如新增.修改时候要记录创建人和更新人信息,如果每次操作都从数据库中获取用户信息,会增加不必要的开销,同时也增加数据库的 ...
- ASP .NET Core MVC 控制器中获取当前登录用户
微软提供了 身份验证:Microsoft.AspNet.Identity 如果想要在控制器中获取当前登录的用户,如下代码: var userId = this.User.FindFirstValue( ...
最新文章
- Array.apply 方法的使用
- python KeyError: 4
- kafka偏移量保存到mysql里_SparkStreaming+kafka保存offset的偏移量到mysql案例
- 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...
- 判断list集合不为空
- MFC中添加Splash Screen
- 客户行为模型 r语言建模_客户行为建模:汇总统计的问题
- 王道考研 计算机网络20 应用层 客户端/服务器C/S模型 P2P模型 DHCP协议 域名解析系统DNS 文件传送协议FTP 万维网 超文本传输协议HTTP
- python五子棋人机对战_Python:游戏:五子棋之人机对战
- python 判断是否有余数_判断多个坐标是否在同一条直线上|Python练习系列[13]
- 大公司c#amp;.net转型java的原因有哪些?
- Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean
- Tempter of the Bone
- 11dayC语言指针-指针变量
- [转]HTML DIV+CSS 命名规范大全
- egg结合mysql如何做数据返回_egg-mysql使用体验和笔记
- 简单算法系列之完数的计算
- 在js中如何比较两个时间字符串的大小
- pycharm汉化(搜索不到插件的参考第二中方法)
- 阿里云跨境电商企业出海最佳实践及数字化解决方案
热门文章
- 文本文档TXT每行开头结尾加内容批处理代码
- 11 个 Nginx 参数性能优化工作
- 狐狸文│区块链发展的正路
- 介绍一个代码管理系统-Git
- mysql导入sql脚本命令
- wireshark远程抓包
- JAVA-MyBatis ORM
- python 中文处理
- error LNK2001: unresolved external symbol public: __thiscall CNaDialog::CNaDialog(class CWnd *)
- ASP.NET Core使用功能开关控制路由访问(续)