技術研究_單點登入(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

於Visual Studio 2022 建立三個專案
(1) 一個是認證授權中心專案,用於頒發 AccessToken。
對於認證授權項目和 API 資源專案,可以使用獨立的伺服器部署,共同給客戶端提供服務。
(2) 一個或多個 API 資源中心專案,用於提供資料資源。
(3) 一個或多個客戶端專案,提供使用者服務,面向使用者。



(1) 一個是認證授權中心專案,用於頒發 AccessToken。





配置IDS4的套件在授權Server專案


1-1.配置API 作用域
在 IdentityServer4 中,可以設定 API 作用域,也就是對 API 數據資源或client端的資源程式存取權限進行配置。可以對客戶端或使用者配置 ApiScope,表示具有某個 API 資源的權。

  • IdentityServer4 只是提供一套針對 API或client端的資源程式進行驗證和授權的框架,本身是不提供任何資源的。
  • 因此,IdentityServer4 在執行授權時,需要提前在IdentityServer4 伺服器上規劃好 API 資源的權限(也可理解為備案),哪些 API 資源可供哪些客戶端呼叫存取。
  • 每個 API或client端的資源的授權,就可以透過一個 ApiScope 物件進行配置,用戶端在呼叫時,也要指定要存取的 ApiScope 作用域。

  • ApiScope 配置如下:
    (1). 設定在 ApiResource 中,1 個 ApiResource 可以包含多個 ApiScope,ApiResource 與 WebAPI 資源專案有關聯,ApiResource 包含的 ApiScope都可以存取與之關聯的 WebAPI 資源。

    (2). 使用策略授權,將 ApiScope 與策略授權關聯,在 WebAPI 資源專案中使用策略授權進行更精細化的控制權限。

    在「Study.TestIDS4.Server」專案中,新增 IdentityConfig.cs 類別文件,
    IdentityConfig.cs



    1-2.配置ApiResource

    在 IdentityServer4 中,設定了 ApiScope 之後,是不能單獨在
    API 資源中配置的,也需要結合 ApiResource 組合在一起使用。

    ApiResources()方法用於將多個 ApiScope 歸為一組,稱為 API 資源,其中包括多個 ApiScope。



    1-3.配置共享的ApiScope

    配置共享的ApiScope 有些ApiResource較沒有捨麼隱密權限問題,可以被定義成共享。
    比方新消息或是公告。

    當我們在 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

    留言

    這個網誌中的熱門文章

    Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

    何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

    (2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題