php facebook授权登录获取头像_IdentityServer4从数据库获取User登录并对Claims授权验证(五)...

本节将在第四节基础上介绍如何实现IdentityServer4从数据库获取User进行验证,并对Claim进行权限设置。


一、新建Web API资源服务,命名为ResourceAPI

(1)新建API项目,用来进行user的身份验证服务。

e28b83ccf9ed951b93897cd551e97354.png

(2)配置端口为5001

安装Microsoft.EntityFrameworkCore

安装Microsoft.EntityFrameworkCore.SqlServer

安装Microsoft.EntityFrameworkCore.Tools

(3)我们在项目添加一个 Entities文件夹。

新建一个User类,存放用户基本信息,其中Claims为一对多的关系。

其中UserId的值是唯一的。

54398ddbee920eedb949a3c8effeb208.png

新建Claims类

a816df72a5a6daf0e0871b91c29f85b2.png

继续新建 UserContext.cs

9eab65a172cb3a2d0ea47e7e006a21a3.png

(4)修改startup.cs中的ConfigureServices方法,添加SQL Server配置。

65230541561deea6503818eb386c9e21.png

完成后在程序包管理器控制台运行:Add-Migration InitUserAuth

生成迁移文件。

(5)添加Models文件夹,定义User的model类和Claims的model类。

在Models文件夹中新建User类:

a271979f86258894b023379c13189051.png

新建Claims类:

5354747619eec6c019414705b925eb9c.png

做Model和Entity之前的映射。

添加类UserMappers:

9437cdfef795fcf5fb35fa0d3e1f0e6b.png

类UserContextProfile:

417fd57f289136a45098d566d1fb10b0.png

(6)在startup.cs中添加初始化数据库的方法InitDataBase方法,对User和Claim做级联插入。

7ae3c9f567634a3256a6ed71c07a15e6.png

(7)在startup.cs中添加InitDataBase方法的引用。

9d56d6c06eb17ff37e906de31012d535.png

运行程序,这时候数据生成数据库UserAuth,表Users中有一条UserName=zhubingjian,Password=123的数据。

845c0a730f22fd69cf51b9bce3c1bd53.png


 

二、实现获取User接口,进行身份验证

(1)先对API进行保护,在Startup.cs的ConfigureServices方法中添加:

6418b206de72e4f285c4076f26d4b730.png

并在Configure中,将UseAuthentication身份验证中间件添加到管道中,以便在每次调用主机时自动执行身份验证。

app.UseAuthentication();

(2)接着,实现获取User的接口。

在ValuesController控制中,添加如下代码:

7ce941f94c0d982755176a7b56f7e3fb.png

580f34ed88332f5110d6ef6fe249a042.png

好了,资源服务器获取User的接口完成了。

(3)接着回到AuthServer项目,把User改成从数据库进行验证。

9bc410c81e229a530e12fd94019ca2b2.png

找到AccountController控制器,把从内存验证User部分修改成从数据库验证。

主要修改Login方法,代码给出了简要注释:

bd47c2a5abd8b90bbb879c062427517d.png

c12dbd2e1dc00fd9ff8fd5f3b68c46fa.png

98047cfe7ee3092cee01282991deba5d.png

可以看到,在IdentityServer4更新后,旧版获取tokenResponse的方法已过时,但我按官网文档的说明,使用新方法(注释的代码),获取不到信息,还望大家指点。

官网链接:https://identitymodel.readthedocs.io/en/latest/client/token.html

0e05767832fd2a3fd6207c596387604f.png

所以这里还是按老方法来获取tokenResponse。

(4)到这步后,可以把Startup中ConfigureServices方法里面的AddTestUsers去掉了。

c060047ef182aa2e9700089085f07e34.png

运行程序,已经可以从数据进行User验证了。

71718db238560c36947dbf1cab4b40bd.png

6ec8e29d5232fc8c4b8816cbf60f8116.png

点击进入About页面时候,出现没有权限提示,我们会发现从数据库获取的User中的Claims不起作用了。

bf906ca5b90a8fe1e7b0feaa18a06888.png


 

三、使用数据数据自定义Claim

为了让获取的Claims起作用,我们来实现IresourceOwnerPasswordValidator接口和IprofileService接口。

(1)在AuthServer中添加类ResourceOwnerPasswordValidator,继承IresourceOwnerPasswordValidator接口。

9c9ed9037a8d8972935a172c34c291cc.png

3a46158f2ac95ced80043665cbb83bb2.png

(2)ProfileService类实现IprofileService接口:

3bfd7ac7c41a84b7d5e725102647c089.png

e4aeca8493991f7aac9b8355c95b0e6e.png

(3)发现代码里面需要在ResourceAPI项目的ValuesController控制器中

添加根据UserId获取User的Claims的接口。

e9cbb624b59f84e0e55e60896f476ea9.png

(4)修改AuthServer中的Config中GetIdentityResources方法,定义从数据获取的Claims为role的信息。

227fd18d8b854b61a16ab5ca924ea4b2.png

(5)在GetClients中把定义的mvc.profile加到Scope配置

2d055063b81512ee6a177b97356e0d70.png

(6)最后记得在Startup的ConfigureServices方法加上

.AddResourceOwnerValidator()

.AddProfileService();

3d17b9a85774a2ff3cf0eca0b8c0f4c1.png

运行后,出现熟悉的About页面(Access Token后面加上去的,源码上有添加方法)

b7ad66f66a564d5a05f5e454257d089a.png


 本节介绍的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 1eddf562bde2a541e2d1df661b859564.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值