技術研究_單點登入(SSO)技術實作_基於OpenID Connect的技術IdentityServer4(IDS4)認證與授權
理論跟概念部分在前幾篇稍微有些消化,大概能知道一些大範圍方向後。
稍微來研究技術實作細節
IdentityServer是根據OpenID Connect協定標準的身份認證和授權程序,它實作了OpenID 和OAuth 2.0 協定。
- 在 WebAPI 中,由於使用的是 HTTP 協定實現資料的傳輸,因此具有無狀態性,只是透過一個 URL 位址即可取得想要的資源,可供任意客戶端調用,靈活性強並且掩蓋底層的技術實現。
- 所以,We bAPI 是非常受開發者喜歡的,可連接任意處的客戶端,不受限制用途很廣。
- 但是,由於客戶端的多樣性,使用傳統根據 Session 和 Cookies已無法滿足身份驗證和授權,此時,基於JWT的身份驗證和授權就出現了。
- JWT 只需要在認證伺服器上拿到一個 Token,這個 Token 包含了用戶身分的聲明,可以用來授權某個使用者,很像買車票要驗票概念。
- OAuth 2.0 主要是用來向第三方應用頒發令牌的,是基於 JWT的授權解決方案。
- 所頒發的令牌包含使用者和授權訊息,並決定這個令牌可以存取資源伺服器上的哪些資源。
- 也就是在「資源伺服器」和「客戶端」之間加一個授權伺服器,負責使用者的授權。
- IdentityServer4 是基於 OpenID Connect 和 OAuth2.0 的 JWT身份驗證和授權框架。
- Identity Server4 目前最新版本是 V4.x,是專門為 ASP. NET Core研發的身份驗證和授權框架。
- 目前可以在 ASP.NET Core 3. x 以上版本中整合使用。
https://www.chinatimes.com/realtimenews/20231031001777-260405?chdtv
https://www.thsrc.com.tw/ArticleContent/baba745a-d802-440c-b762-3eef37b96b60
https://www.thsrc.com.tw/ArticleContent/baba745a-d802-440c-b762-3eef37b96b60
於Visual Studio 2022 建立三個專案
(1) 一個是認證授權中心專案,用於頒發 AccessToken。
對於認證授權項目和 API 資源專案,可以使用獨立的伺服器部署,共同給客戶端提供服務。
對於認證授權項目和 API 資源專案,可以使用獨立的伺服器部署,共同給客戶端提供服務。
(2) 一個或多個 API 資源中心專案,用於提供資料資源。
(3) 一個或多個客戶端專案,提供使用者服務,面向使用者。
(1) 一個是認證授權中心專案,用於頒發 AccessToken。
1-1.配置API 作用域
在 IdentityServer4 中,可以設定 API 作用域,也就是對 API 數據資源或client端的資源程式存取權限進行配置。可以對客戶端或使用者配置 ApiScope,表示具有某個 API 資源的權。
ApiScope 配置如下:
(1). 設定在 ApiResource 中,1 個 ApiResource 可以包含多個 ApiScope,ApiResource 與 WebAPI 資源專案有關聯,ApiResource 包含的 ApiScope都可以存取與之關聯的 WebAPI 資源。
(2). 使用策略授權,將 ApiScope 與策略授權關聯,在 WebAPI 資源專案中使用策略授權進行更精細化的控制權限。
在「Study.TestIDS4.Server」專案中,新增 IdentityConfig.cs 類別文件,
IdentityConfig.cs
ApiResources()方法用於將多個 ApiScope 歸為一組,稱為 API 資源,其中包括多個 ApiScope。
比方新消息或是公告。
當我們在 IdentityServer4 伺服器上,設定好 ApiResource 和 ApiScope之後,就可以設定 Client 用戶端及可存取的 API 資源範圍。
- 設定客戶端,就是在 IdentityServer4 伺服器上先對客戶端進行備案
- 然後客戶端使用備案過的資訊就可以在 IdentityServer4 伺服器上取得存取token
- 再去API 資源伺服器上存取指定的資源。
Ref:
https://identityserver4.readthedocs.io/en/latest/
初探IdentityServer4 - 為API增加角色驗證機制
https://www.tpisoftware.com/tpu/articleDetails/2217
適用於雲端原生應用程式的 IdentityServer
https://learn.microsoft.com/zh-tw/dotnet/architecture/cloud-native/identity-server
留言
張貼留言