本节将在第四节基础上介绍如何实现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授权验证(五)相关推荐

  1. identity4使用mysql_IdentityServer4-从数据库获取User登录并对Claims授权验证(五)

    本节将在第四节基础上介绍如何实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置. 一.新建Web API资源服务,命名为ResourceAPI (1)新建API ...

  2. Bootstrap4+MySQL前后端综合实训-Day06-AM【eclipse详细配置Tomcat、开发web项目、servlet、连接MySQL8.0数据库、用户登录界面的编写与验证、分页查询】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记][附:实训所有代码] 目   录 eclipse重置视图 MySQL数据库--建数据库.建数据库 s ...

  3. cas返回mysql数据_单点登录 CAS 5.* - 从数据库获取用户信息 - 4

    前面演示的项目 都是使用的固定用户,现在,可以尝试从数据库获取用户+密码尝试登录, 创建表和数据: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_I ...

  4. Amazon 中国区配置 PingIdentity 身份集成实现 Redshift 数据库群集单点登录

    无疑使用单点登录 (SSO)访问组织中的多种应用程序能够提升用户体验 . 如果您负责为 Amazon Redshift 启用 SSO,则可以使用 ADFS.PingIdentity.Okta.Azur ...

  5. 数据库中用户登录注册用户信息表怎么设计如何设计

    用户登录 站内登录:用户信息+密码的验证形式: 用户名+密码, 手机+密码, 站外授权:第三方登录, 其实它也是用户信息+密码的形式, 用户信息即第三方系统中的ID(第三方登录一定会给一个在他们系统中 ...

  6. Springboot集成SpringSecurity(获取当前登录人)

    简言 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架.它是用于保护基于Spring的应用程序的实际标准. Spring Security是一个框架,致力于为Java应 ...

  7. Django之使用自定义用户表(AbstractUser)/自定义登录验证(jwt)/获取当前登录用户

    基本步骤: 一.自定义用户表: 1.自定义的用户表继承AbstractUser: 2.settings.py添加配置,指向用户表:AUTH_USER_MODEL = 'myUser.Account'( ...

  8. java_后端获取当前登录用户信息

    后端获取当前登录用户信息 开发过程中,发现有很多地方需要获取当前登录的用户信息,比如新增.修改时候要记录创建人和更新人信息,如果每次操作都从数据库中获取用户信息,会增加不必要的开销,同时也增加数据库的 ...

  9. ASP .NET Core MVC 控制器中获取当前登录用户

    微软提供了 身份验证:Microsoft.AspNet.Identity 如果想要在控制器中获取当前登录的用户,如下代码: var userId = this.User.FindFirstValue( ...

最新文章

  1. Array.apply 方法的使用
  2. python KeyError: 4
  3. kafka偏移量保存到mysql里_SparkStreaming+kafka保存offset的偏移量到mysql案例
  4. 用MATLAB编程正弦稳态相量图,matlab课程设计--利用MATLAB对线性电路正弦稳态特性分析...
  5. 判断list集合不为空
  6. MFC中添加Splash Screen
  7. 客户行为模型 r语言建模_客户行为建模:汇总统计的问题
  8. 王道考研 计算机网络20 应用层 客户端/服务器C/S模型 P2P模型 DHCP协议 域名解析系统DNS 文件传送协议FTP 万维网 超文本传输协议HTTP
  9. python五子棋人机对战_Python:游戏:五子棋之人机对战
  10. python 判断是否有余数_判断多个坐标是否在同一条直线上|Python练习系列[13]
  11. 大公司c#amp;.net转型java的原因有哪些?
  12. Spring学习--实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean
  13. Tempter of the Bone
  14. 11dayC语言指针-指针变量
  15. [转]HTML DIV+CSS 命名规范大全
  16. egg结合mysql如何做数据返回_egg-mysql使用体验和笔记
  17. 简单算法系列之完数的计算
  18. 在js中如何比较两个时间字符串的大小
  19. pycharm汉化(搜索不到插件的参考第二中方法)
  20. 阿里云跨境电商企业出海最佳实践及数字化解决方案

热门文章

  1. 文本文档TXT每行开头结尾加内容批处理代码
  2. 11 个 Nginx 参数性能优化工作
  3. 狐狸文│区块链发展的正路
  4. 介绍一个代码管理系统-Git
  5. mysql导入sql脚本命令
  6. wireshark远程抓包
  7. JAVA-MyBatis ORM
  8. python 中文处理
  9. error LNK2001: unresolved external symbol public: __thiscall CNaDialog::CNaDialog(class CWnd *)
  10. ASP.NET Core使用功能开关控制路由访问(续)