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授权验证(五)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: surging 微服务引擎 1.0 正式
- 下一篇: 用ABP只要加人即可马上加快项目进展(二