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 為我們提供的認證授權服務了。