Identity Server 4 從入門到落地(一)—— 從IdentityServer4.Admin開始

最近項目中需要使用Identity Server 4,以前對這個技術只是有些了解,沒有系統研究過,網上相關的資料不少,大多是從編寫一個簡單的認證服務開始,離能夠落地使用有相當的距離,理論學習如何不結合實際,只能停留在概念層面。我希望的是能有一個已經可以部署的基於Identity Server 4的認證服務應用,在此基礎上研究客戶端和Api的編寫,以及對各種需求場景進行測試。對這樣一個應用的基本要求除了認證服務的功能以外,還包括(1)具備編輯或者配置功能。能夠編輯User、Role、Client、Scope、Api Resource等,編輯的內容可以保存在數據庫或者配置文件中;(2)可以工作在SSL協議和非SSL協議。在本地測試時,為了簡化環境,希望可以不使用SSL協議。(3)可以獨立部署,也可以部署在IIS,還需要支持Docker容器部署。沿着這個思路,在GitHub中找到了IdentityServer4.Admin這個項目,基本上符合要求://github.com/skoruba/IdentityServer4.Admin 。這個項目支持使用模板開發,可以使用模板創建新的項目,按照自己的需要進行改造,我在這項目的基礎上,增加了對BasePath的支持,這樣可以將認證服務器和編輯模塊部署到同一端口的不同目錄下(使用IIS或者Nginx等反向代理),還增加了對非SSL的支持。在Docker支持方面,原項目的配置過於複雜,改為針對認證服務和編輯模塊生成兩個不同的鏡像,在部署時分別創建容器就可以了。項目的地址是 //github.com/zhenl/IDS4Admin 。項目使用Visual Studio 2022,基於.Net 5(認證服務和管理)和.Net 6(輔助工具控制台)。

克隆或者下載項目後,運行buildscript.bat可以生成部署文件和輔助工具。生成的目錄與項目目錄同級,名稱為IDS4AdminPublish,包括三個子目錄,一個是認證服務器(STS),一個是管理界面(Admin),還有一個是輔助工具(Tool)。輔助工具方便生成配置文件和初始的種子數據。

首先進入Tool目錄,運行輔助工具IDS4Admin.Tool.exe,設置認證服務器和管理界面應用的地址、數據庫的類型和連接字符串,設置完成後執行命令「5」生成配置文件。

生成的json文件保存在Output目錄下,包括兩個子目錄,Admin子目錄中包括生成的三個json文件,這三個文件需要拷貝到管理應用的運行目錄中(IDS4AdminPublish/Admin),覆蓋現有文件,STS子目錄中包括生成的認證服務的配置文件,拷貝到認證服務的運行目錄中(IDS4AdminPublish/STS)。第一次運行時,要首先運行管理界面應用,因為初始化數據庫的部分在這個應用中,然後運行認證服務器,如果一切順利,在瀏覽器中訪問管理應用,會跳轉到認證服務器,要求登錄,初始用戶名為admin,密碼為P@$$word123。登錄完成後,就可以對認證服務的資源進行管理了。

環境搭好了,我們可以編寫客戶端和Api進行測試,深入理解相關的概念。