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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

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

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

上一篇《.NET Core微服務之基于IdentityServer建立授權與驗證服務》我們基于IdentityServer4建立了一個AuthorizationServer,并且繼承了QuickStartUI,能夠成功獲取Token了。這一篇我們了解下如何集成API Service和MVC Web Application。

一、集成API Service

1.1 添加ASP.NET Core WebAPI項目

  新建兩個WebAPI程序,假設這里取名為ApiService01(占用端口5010)和ApiService02(占用端口5020)。

  

  為了方便快速啟動,可以繼續在launchSettings.json中刪掉關于IISExpress的部分,由于是WebAPI,所以也不需要啟動瀏覽器(將其設為false):

1.2 安裝IdentityServer4.AccessTokenValidation

NuGet>Install-Package IdentityServer4.AccessTokenValidation  

  安裝完成之后,需要做一些適配,所以我們來注冊一下關于其的配置:這里設置的默認模式是Bearer,其中AddIdentityServerAuthentication方法是將我們上一篇創建的授權服務器注冊為token的處理人,即在本API程序中涉及到token的處理,都會移交給指定服務器(這里即上一篇中創建的AuthorizationServer)進行處理。

  配置文件中的內容如下所示:這里需要注意的是Name需要和我們在上一篇中的InMemoryConfiguration中自行hard-code的一樣

  此外,還需要在Configure方法中配置Authentication中間件:這里需要注意的就是需要放在UseMvc()之前調用

  以上是ApiService01的配置,ApiService02的配置類似,只是配置文件中的信息從clientservice改為了productservice。

1.3 為要進行驗證授權的方法添加[Authorize]特性

  由于我們創建WebAPI時,默認有一個ValuesController,保留它,我們直接為這個Controller添加一個[Authorize]特性。

? ?[Authorize][Route("api/[controller]")] ? ?public class ValuesController : Controller{......}

  這樣的話,剛剛注冊的中間件就會在請求的過程中基于傳遞過來的token進行Authorization,如果沒有token或者token是非法的,它就會告訴api的消費者這個請求時未授權的(HTTP StatusCode 401)

1.4 簡單測試一下

  測試之前首先確保AuthorizationServer和兩個ApiService都一起啟動,可以在解決方案屬性的啟動選項中進行設置。

  (1)不帶token的情況

  

  (2)帶正確token的情況

  首先請求獲取一下token:這里我們使用的grant_type是client_credentials,也可以使用password(需要輸入用戶名和密碼)。

  

  帶上這個token再去調用api service

  

  (3)帶不正確的token的情況(這里簡單改一下token的值)

  

  (4)用剛剛授予(clientservice)的token訪問未經授權的productservice

  

  我們也可以通過在ValuesController中加上如下的一句,來獲取Claims => 它是從已驗證過的token中抽取的信息。如果我們將上面獲取的token的grant_type設置為password的話,那我們會在Claims中獲取到用戶ID的信息。

  

  

二、集成MVC Web Application

2.1 添加ASP.NET Core MVC項目

  新建一個ASP.NET Core MVC項目,這里假設取名為MvcClient(占用端口5100)

  仍然修改launchSettings.json,刪掉IISExpress部分,但仍然選擇啟動瀏覽器:

2.2 為指定方法添加[Authorize]特性

  這里我們在HomeController的About方法上面添加[Authorize]特性:

  這時如果我們直接訪問About,會拋異常,告知我們No authenticationScheme was specified......

  而我們想要的效果是當User第一次點擊About,頁面重定向到AuthorizationServer (localhost:5000),當用戶登錄驗證授權之后,再重定向到該網站。此后一定時間范圍內的第二次,第三次點擊,都不再需要再重定向到AuthorizationServer,而是直接讀取保存的token。

2.3 添加OpenID Connect Authentication

  這一部分主要集中于做Authentication(身份驗證)而非Authorization(授權)。

  這里我們使用的是implicit這個flow(詳細內容可以閱讀ddrsql的IdentityServer4之Implicit(隱式許可)),它主要用于客戶端應用程序(主要指基于javascript的應用),它允許客戶端程序重定向到AuthorizationServer,然后帶著token重定向回來。值得一提的是這里的ResponseType為"id_token token",表示既獲取id_token也獲取access_token。而SaveTokens設為true則表示要將從AuthorizationServer返回的token持久化在cookie之中,這樣就不用每次都去請求token了。

  當然,也還得在Configure方法中,配置Authentication中間件:

  *.位置仍然需要在UseMvc之前。

2.4 在AuthorizationServer添加這個MvcClient

?  在InMemoryConfiguration類中修改GetClients方法:

  這里的ClientId要和MvcClient中設置的一致。RedirectUris是指登錄成功之后需要重定向的地址(這里這個位置在MvcClient中),而PostLogoutRedirectUris是指登出之后需要重定向的地址。和API Service Client的設置不同的就是在AllowedScopes中給它增加了OpenId和Profile,因為我們為MvcClient設定的是oidc而不是bearer的模式。最后為了使用這些OpenID Connect Scopes,需要設置這些Identity Resources:

  同時,為了演示方便,我們在MvcClient的About視圖中添加幾句:

  這里我們將id_token, access_token(只有拿到access_token,才可以在MvcClient中發起請求調用API Service,而具體可以訪問哪些API Service是在InMemoryConfiguration中配置的AllowScopes里面的那些)都顯示出來,還會將Claims數據也顯示出來(這里的Claims數據就是從AuthorizationServer返回的token里面payload部分的數據,關于payload請搜索JWT)

2.5 簡單測試一下

  (1)未登陸的情況

  

  拿到access_token,可以去JWT.io上進行解析看看:比如關注payload部分,可以得到很多信息,比如過期時間為1小時(默認)

  

  (2)已登錄的情況

  這里為了方便演示,新增一個Logout方法:這里需要確保同時登出MvcClient的Cookies和OpenId Connect(即到Identity Server去清除單點登錄的Session)。

 

  最后,關于access token的生命周期,可以閱讀一下園友曉晨Master(李志強)的《IdentityServer4實戰 - AccessToken 生命周期分析》,里面提到一個時間偏移的概念,需要了解一下。另外,如果是前后端分離的結構,也可以瀏覽一下ddrsql的《IdentityServer4之Implicit(隱式許可) —— oidc-client-js前后端分離》,里面介紹了oidc-client這個JS庫的使用,以及如何支持跨域。

三、小結

  本篇基于上一篇搭建好的AuthorizationServer,通過集成API Service與MVC Web Application來演示他們如何與Authorization Server的交互,了解了兩種不同的Scheme(Bearer和Implicit),最后補充了一些材料供擴展閱讀。但是,IdentityServer的內容很多,我只是學習了一些我要掌握以做POC的部分,其他還有很多功能和知識點我沒有學習,大家可以通過搜索園子里各種大神(eg.曉晨Master, solenovex等等等等)的文章進行學習。后面我會將IdentityServer與Ocelot進行集成,嘗試在API網關處做統一驗證與授權。最后,感謝參考資料的作者們,本篇主要基于參考資料的學習而成的筆記。另外,一些朋友十分想要一些基于生產環境的采坑經驗以及更加實際的應用案例,對此我只能說聲抱歉,我目前仍然處于學習與準備POC階段,目的是為了在公司里推廣以及給老板安利(雖然很難),還沒有實際項目遷移到.NET Core微服務架構上去,但是如果不努力讓公司遷移和應用,那像我司一樣的傳統行業的金融保險公司是不會主動升級的,還請各位諒解。

示例代碼

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

參考資料

《identityserver4官方文檔》=> 重點關注那些流程圖與術語

  • solenovex,《學習Identity Server4的預備知識》

  • 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 - 解析微軟微服務架構eShopOnContainers(二)

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

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

  • IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架學習保護API

  • IdentityServer4 SigningCredential(RSA 證書加密)

  • IdentityServer4 實現自定義 GrantType 授權模式

  • IdentityServer4 配置負載均衡

  • IdentityServer4使用教程1--搭建ID4網站

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

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

原文地址:

http://www.cnblogs.com/edisonchou/p/identityserver4_foundation_and_quickstart_02.html

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。