本节将在第四节基础上介绍如何实现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()

.AddProfileService();

运行后,出现熟悉的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

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

  1. php获取数据库头像,phpcms获取头像如何写入数据库

    phpcms获取头像如何写入数据库? 使用的是qq登录, 目前已经获取都qq登录的 昵称 和 头像, 头像的数据保存在哪里呢?怎么写入啊 回复讨论(解决方案) zhaoji,在线等啊 我是将头像存到服 ...

  2. php获取头像,WordPress中用于获取及自定义头像图片的PHP脚本详解

    get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供一个 get_avatar 过滤器,用来过滤头像的 Html ...

  3. php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像) get_avat - phpStudy...

    WordPress中用于获取及自定义头像图片的PHP脚本详解 get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供 ...

  4. 微信小程序简单实现获取用户授权、用户头像并保存到本地

    文章目录 一.获取用户授权 二.获取用户头像并保存 三.实现效果 一.获取用户授权 以index单页面示例, 1.在index.js中的Page-data注册canIUse,用于调用微信开放接口申请用 ...

  5. 5.3Role和Claims授权「深入浅出ASP.NET Core系列」

    5.3Role和Claims授权「深入浅出ASP.NET Core系列」 原文:5.3Role和Claims授权「深入浅出ASP.NET Core系列」 希望给你3-5分钟的碎片化学习,可能是坐地铁. ...

  6. 微信小程序实现登录获取头像昵称

    微信小程序如何来获取用户头像昵称 大家一定对下面这个图不陌生吧,我们在进入小程序之前,都会遇见类似这样的情况,那么这个是怎么用微信开发者工具实现的呢? 要求 1.首先,我们打开微信开发者工具,新建一个 ...

  7. Android 集成QQ登录,获取头像与昵称

    QQ登录集成 腾讯开放平台地址:http://open.qq.com/ 如果没注册过的同学需要先注册,还要上传自己的手持身份证的证件照,腾讯审核通过后才能注册成功. 创建应用,获取appID.如果测试 ...

  8. uni-app微信小程序微信登录(获取头像、个性签名等基本信息)

    1.思路 微信小程序用微信授权登录的思路:官方在线文档 1.前端调用调uni.login() 获取临时登录凭证code ,并将获取的用户信息和code回传到后端: 2.后端调用 auth.code2S ...

  9. 抖音小程序request封装,登陆授权获取头像方案,及广告加载注意事项

    api.js 文件  封装request var n = function (t, n, r, o, i, a) {return i && tt.showLoading({title: ...

  10. 微信小程序——按钮登录获取用户头像昵称、不需要获取权限就能显示头像和昵称、获取手机号(云端)

    1.登录获取用户头像昵称 代码 app.js App({globalData: {userInfo: null},onLaunch() {} }) . . . index.js const app = ...

最新文章

  1. 打印product所有attachment 具体信息的小工具
  2. docker添加jar包_docker配置容器运行jar包
  3. 第四十四期:1.3万亿条数据查询如何做到毫秒级响应?
  4. java从键盘上录入任何整数,输出该整数的阶乘
  5. GitHub中README.md文件的编辑
  6. 土耳其电信与华为签署5G协议谅解备忘录
  7. RHEL6基础三十七之系统时间修正、GRUB背景图片修改
  8. mac上数据库管理工具Navicat Premium 连接mySQL
  9. Python-《转载-Github上的python开源项目》
  10. Linux系统刻盘失败,linux下如何刻盘
  11. xheditor漏洞 php,xheditor默认upload.php畸形文件上传漏洞
  12. 网盘搜索引擎原理大揭秘
  13. oracle 配置不能保存,Oracle Net Manager保存网络配置提示无效条目Error writing entr
  14. 安全防御----防火墙
  15. ARM6818开发板画任意矩形,圆形,三角形,五角星,6818开发板画太极,画五星红旗(含码源与思路)
  16. 火影忍者379话最新情报
  17. PyTorch 入门:训练一个深度神经网络(DNN)
  18. 群联金士顿惠普自封颗粒对应ID及相关数据表
  19. 动态骨骼Dynamic Bone优化
  20. 计算机集成过程系统的现状及发展,信息系统集成的现状与未来发展

热门文章

  1. 从Slice_Header学习H.264(二)--片头的子语法项目
  2. ffmpeg代码实现自定义decoder
  3. 页面回收之shrink_zone的实现
  4. Linux内核部件分析 设备驱动模型之device-driver
  5. SDP在SIP协议中的应用
  6. flutter 全选_Android Studio写flutter快捷键
  7. idea每次都要配置tomcat_午饭收藏夹里的c位石锅拌饭,每次来到都要等位......
  8. 学生如何免费使用Jetbrains旗下包含Pycharm等开发工具(中文详细教程)
  9. Hbase KeyValue结构详解
  10. Ubuntu20.04下使用C++ OpenCV单应性矩阵