日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core微服务之基于IdentityServer建立授权与验证服务

發(fā)布時間:2023/12/4 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core微服务之基于IdentityServer建立授权与验证服务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、IdentityServer的預(yù)備知識

  要學(xué)習(xí)IdentityServer,事先得了解一下基于Token的驗證體系,這是一個龐大的主題,涉及到Token,OAuth&OpenID,JWT,協(xié)議規(guī)范等等等等,園子里已經(jīng)有很多介紹的文章了,個人覺得solenovex的這一篇文章《學(xué)習(xí)IdentityServer4的預(yù)備知識》言簡意賅,可以快速的看看。另外savaboard的《ASP.NET Core 之 Identity 入門(一)》和《ASP.NET Core 之 Identity 入門(二)》這兩篇也可以一看,對Claims和Identity的基本知識講的比較通俗易懂,深入淺出,有故事情節(jié),哈哈。

  重點關(guān)注一下上面這張圖(也是來自solenovex的文章),對于一個User(已注冊)來說,他會首先向Authorization Server表明自己的身份(比如輸入用戶名和密碼),然后Authorization Server為其發(fā)放了一個token,而這個token就好比是把家里的鑰匙配了一把(clone)新的,此后該User就可以訪問API請求獲取Orders(訂單)數(shù)據(jù)了。當然,實際中可能Authorization Server和API Server不在同一個區(qū)域內(nèi),它們可能只能遙望對方。此外,User還可以基于這個token去訪問第三方服務(wù),第三方服務(wù)會使用這個API來訪問API Server,向其提供token比提供username&password要安全得多。

二、IdentityServer極簡介紹

  IdentityServer4(這里只使用版本號為4)是一個基于OpenID Connect和OAuth 2.0的針對ASP.NET Core 2.0的框架。IdentityServer是將規(guī)范兼容的OpenID Connect和OAuth 2.0終結(jié)點添加到任意ASP.NET Core應(yīng)用程序的中間件。通常,你構(gòu)建(或重新使用)包含登錄和注銷頁面的應(yīng)用程序,IdentityServer中間件會向其添加必要的協(xié)議頭,以便客戶端應(yīng)用程序可以使用這些標準協(xié)議與其對話。

  我們可以用IdentityServer來做啥?

  (1)身份驗證服務(wù)=>官方認證的OpenID Connect實現(xiàn)

  (2)單點登錄/注銷(SSO)

  (3)訪問受控的API=>為不同的客戶提供訪問API的令牌,比如:MVC網(wǎng)站、SPA、Mobile App等

  (4)等等等......

三、Started:第一個AuthorizationServer

1.1 建立一個ASP.NET Core空Web項目

  建立ASP.NET Core項目,使用Empty空模板。

  為了更好地查看日志信息,同時考慮到IISExpress啟動起來真的很慢,修改lanuchSettings.json文件如下:

1.2 安裝并配置IdentityServer4

  Step1.首先安裝IdentityServer4:

NuGet>Install-Package IdentityServer4  

  Step2.配置ASP.NET Core管道,即修改Configure方法

  Step3.為了要把IdentityServer注冊到容器中,需要對其進行配置,而這個配置中要包含三個信息:

  (1)哪些API可以使用這個AuthorizationServer

  (2)哪些Client可以使用這個AuthorizationServer

  (3)哪些User可以被這個AuthrizationServer識別并授權(quán)

  這里為了快速演示,我們寫一個基于內(nèi)存的靜態(tài)類來快速填充上面這些信息(實際中,可以持久化在數(shù)據(jù)庫中通過EF等ORM獲取,也可以通過Redis獲取):

?  Step4.對于Token簽名需要一對公鑰和私鑰,不過IdentityServer為開發(fā)者提供了一個AddDeveloperSigningCredential()方法,它會幫我們搞定這個事,并默認存到硬盤中。當切換到生產(chǎn)環(huán)境時,還是得使用正兒八經(jīng)的證書,更換為使用AddSigningCredential()方法。

?

1.3 獲取你心心念念的Token

  Step1.啟動剛剛我們建立的AuthorizationServer程序,這里我們綁定的是5000端口。

  Step2.啟動Postman/SoapUI等API測試工具,通過向HTTP Body中填寫數(shù)據(jù)發(fā)起POST請求:

  

  

  Step3.發(fā)送一個錯誤的數(shù)據(jù),看看返回的是啥?(這里輸入了一個不在定義列表中的client_id)

  

  Step4.查看控制臺的日志信息:表示獲取Token的這個請求成功了,日志中client_secret和password都是不會直接明文顯示的。

  

  Step5.IdentityServer中我們設(shè)置這幾個API Service的Grant_Type是ResourceOwnerPasswordAndClientCredentials(點擊這里了解=>資源擁有者密碼憑據(jù)許可),因此我們還可以使用ClientCredentials(點擊這里了解=>客戶端憑據(jù)許可),如下所示:

  

  Step6.再次查看控制臺日志信息:這次沒有關(guān)于User相關(guān)的任何信息顯示了。

  

  Step7.基本的開發(fā)結(jié)束,對于開發(fā)階段,我們使用IdentityServer為開發(fā)者提供的臨時證書即可,但是后面仍然需要生成一些正兒八經(jīng)的證書。這里我們通過OpenSSL來生成,首先去官網(wǎng)下載一個,這里使用的是Win64_1.1版本。打開Powershell或者CMD,輸入以下命令:

cmd>openssl req -newkey rsa:2048 -nodes -keyout cas.clientservice.key -x509 -days 365 -out cas.clientservice.cer

下面將生成的證書和Key封裝成一個文件,以便IdentityServer可以使用它們?nèi)フ_地簽名tokens

cmd>openssl pkcs12 -export -in?cas.clientservice.cer -inkey?cas.clientservice.key -out?cas.clientservice.pfx

  中途會提示讓你輸入Export Password,這個password后面會用到,記住它。最終導(dǎo)出后的結(jié)果如下圖所示:

  

  這里我將其放到了項目結(jié)構(gòu)文件夾中,并設(shè)置這個pfx文件為“如果較新則復(fù)制”,確保可以在最后生成的目錄里邊。現(xiàn)在就可以修改一下ConfigureServices()方法了:

這里我將證書的路徑和導(dǎo)出密碼都寫到了配置文件中:

{ ?"Certificates": { ?
? ??
"CerPath": "certificate\\cas.clientservice.pfx",
?? ?
"Password": "manulife"} }

好,配置正兒八經(jīng)的證書這一步驟Over。

四、IdentityServer QuickStart-UI

4.1 關(guān)于QuickStart UI

  IdentityServer為我們提供了一套UI以便使我們能夠快速地開發(fā)具有基本功能的認證/授權(quán)界面,我們可以去這個地址:https://github.com/IdentityServer/IdentityServer4.Quickstart.UI/tree/release?下載,并將其復(fù)制到我們的項目目錄中。

  復(fù)制完成后,我們的項目結(jié)構(gòu)如下圖所示:

4.2 修改DI方法

  (1)使用MVC與靜態(tài)文件(由于wwwroot下有很多靜態(tài)資源文件)

  (2)注冊MVC

4.3 Run  

  (1)首頁(這里由于我已經(jīng)登錄,所以這里會把我的賬號顯示了出來)

  

  (2)Logout頁,剛剛說到我已經(jīng)實現(xiàn)Login了,所以我這里L(fēng)ogout一下

    

  (3)Login頁:這里只能識別我們在之前配置的靜態(tài)User列表中那些User

  

  登錄之后,顯示:"You have not given access to any applications",表示我們還沒有給他授予訪問任何API或網(wǎng)站模塊的權(quán)限。后續(xù)我們會創(chuàng)建API和MVC網(wǎng)站來演示如何對其進行授權(quán)和訪問。

  

五、小結(jié)

  本篇主要簡單的介紹了IdentityServer以及如何基于IdentityServer建立一個基本的AuthorizationServer,如何獲取Token,以及集成QuickStart UI實現(xiàn)基本的界面展示。后續(xù)還會創(chuàng)建API和MVC網(wǎng)站,來和IdentityServer進行集成,以演示如何對User授予訪問API和MVC網(wǎng)站的訪問權(quán)限。

示例代碼

  Click =>?https://github.com/EdisonChou/EDC.IdentityServer4.Demo

參考資料

  • 《identityserver4官方文檔》=> 重點關(guān)注那些流程圖與術(shù)語

  • ddrsql,《IdentityServer4之Resource Owner Password Credentials(資源擁有者密碼憑據(jù)許可)》

  • ddrsql,《IdentityServer4之Client Credentials(客戶端憑據(jù)許可)》

  • solenovex,《學(xué)習(xí)Identity Server4的預(yù)備知識》

  • solenovex,《使用Identity Server 4建立Authorization Server (1)》

  • solenovex,《使用Identity Server 4建立Authorization Server (2)》

  • solenovex,《使用Identity Server 4建立Authorization Server (3)》

  • 使用Identity Server 4建立Authorization Server (4)

  • 使用Identity Server 4建立Authorization Server (5)

  • Identity Service - 解析微軟微服務(wù)架構(gòu)eShopOnContainers(二)

  • IdentityServer4(OAuth2.0服務(wù))折騰筆記

  • IdentityServer4 指定角色授權(quán)(Authorize(Roles="admin"))

  • IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架學(xué)習(xí)保護API

  • IdentityServer4 SigningCredential(RSA 證書加密)

  • IdentityServer4 實現(xiàn)自定義 GrantType 授權(quán)模式

  • IdentityServer4 配置負載均衡

  • IdentityServer4使用教程1--搭建ID4網(wǎng)站

  • IdentityServer4(10)- 添加對外部認證的支持之QQ登錄

  • IdentityServer4 第三方快速入門和示例

原文地址:https://www.cnblogs.com/edisonchou/p/identityserver4_foundation_and_quickstart_01.html

.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結(jié)

以上是生活随笔為你收集整理的.NET Core微服务之基于IdentityServer建立授权与验证服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。