企業應用架構研究系列二十五:IdentityServer4 認證服務搭建

溫森特發表於2023-01-11

  IdentityServer4 更新了開源協議,曾經想替換它,不在使用IdentityServer4 ,但是後來,研究來研究去,發現IdentityServer4 的功能實在是強大,設計體系完整,隨著最後版本的升級,現在 IdentityServer4 已經可以在.Net Core 6.0 環境中進行部署使用了。基於中小型專案快速開發搭建的需要,還是有必要對IdentityServer4 的使用做一次 總結。

  首先需要安裝一下必要的Nuget 支援包,如下圖所示,本示例採用的SQL Server 伺服器,安裝的是EFCore 最新的版本EFCore7.0,安裝Nuget包就不在這裡贅述了,基本.Net 開發人員都會的。

  

  安裝必要的Nuget 包後,需要對IdentityServer4 在程式主機啟動的時候,進行註冊配置,這個啟動程式的配置至關重要,也是 IdentityServer4 配置裡面最核心的部分,如下圖所示。裡面需要配置一下 IdentityServer4 的Token 頒發策略,同時需要對 IdentityServer4 的PersistedGrantDbContext 序列化Token庫,ConfigurationDbContext 配置資訊庫進行配置。IdentityServer4 的加密簽名Provider 可以按照其介面協議,採用數字證書籤名,也可以採用非對稱加密RSA 生成的公私鑰形式進行簽名。本示例採用了RSA生成的私鑰進行的IdentityServer4  加密技術。

  

  IdentityServer4 可以標準的OpenID Connect and OAuth 2.0認證方式,但中小型專案中,更青睞自定義的認證方式,這個時候,就需要實現 IExtensionGrantValidator 這個介面,進行認證方式擴充套件,具體實現也是非常簡單的,如下圖所示。實現完邏輯後,在應用程式主機的啟動時候,進行註冊,.AddExtensionGrantValidator<IdentityPasswordValidator>(),上面的貼圖也有該示例。

  

  IdentityServer4 做好了這些後,還需要做一個資料庫的初始化操作,方便IDS服務的快速的部署,也是提高程式的完整性。這個其實也很簡單,利用EFCore 的強大的Migration 功能,把 PersistedGrantDbContext ,ConfigurationDbContext ,和自定義的DBContext 進行初始化封裝,同時,可以對IdentityServer4  裡面對 ApiScopes,Clients,IdentityResources,ApiResources 等配置資源進行動初始化的配置。這個配置也可以透過安裝IdentityServer4.Admin.UI 包的形式,透過介面進行配置。但對於中小型專案,基本配置一次,很少進行調整,因此,我們在這裡,透過程式碼進行了初始化配置這個方案。IdentityServer4 的整體配置見下圖。

  

  做完這些開發配置後,我們就可以使用 IdentityServer4 為我們提供的認證授權服務了。

  

 

相關文章