想學習 IdentityServer4 的身份服務器的開發,但正好處於 Net Core 發佈 3.0,各類框架處於升級中。git
IdentityServer4 盡提供了基礎的功能,界面UI 須要擴展,或者購買商業諮詢服務。Github 有幾個擴展的項目,其中兩個處於持續的更新中,包括升級 Net Core 3.0,分別是:brunohbrito/JPProject.IdentityServer4.SSO,github
skoruba/IdentityServer4.Admin ,本Blog僅描述使用後者的一些經驗:sql
dentityServer4.Admin 的 Dev 版已升級 Net Core 3.0,Clone 整個源碼在本地測試,過程記錄:docker
測試環境是:windows2012, VS2019 16.4, 沒有安裝 .Net 4.7.2 產生一個 Build Error : MSB3086 , 未能使用 SdkToolsPath, 或者 找到「al.exe」,安裝後OK。shell
1)因爲源項目支持 Docker ,win2012 須要安裝 Docker Tools ,麻煩,直接將「VS項目docker-compose」 卸載,不然有一些配置會提示。數據庫
2)同時也刪除了主項目 STS.Identity 的 Docker 支持:launchSettings.json 的 Docker 啓動項,項目根目錄下的 Dockerfile。(項目要增長Docker支持,右健點項目,選‘添加/ Docker 支持...’,能夠從新加上刪除的兩項信息。---- 新建 VS Core Web項目時,有支持 Docker 的可選項。)----- 僅是我的考慮。json
整個解決方案須要設置三個啓動項目:(右鍵點擊 ’VS解決方案‘,選擇 ’設置啓動項目...‘ 菜單。)windows
一、主項目:Skoruba.IdentityServer4.STS.Identity IdentityServer4 的擴展,能夠單獨啓動。服務器
1.1)主項目依賴:Skoruba.IdentityServer4.Admin.EntityFramework 數據結構
(依賴 Skoruba.IdentityServer4.Admin.EntityFramework.Extensions)
Skoruba.IdentityServer4.Admin.EntityFramework.Identity (依賴 Admin.EntityFramework)
Skoruba.IdentityServer4.Admin.EntityFramework.Shared (依賴 Admin.EntityFramework、Identity)
1.2)要真正能運行起來,重點是 EF Core 的配置,以及 數據遷移Migration 命令的運行。因爲使用了EF框架,能夠支持多種數據庫:MSSQL、PostgreSQL, SQLite, MySQL等,但首先要安裝相應的驅動。
Install-Package Microsoft.EntityFrameworkCore.SqlServer 支持 MSSQL Server, (坑之一)
特別提示,源項目的依賴中沒有引入。不然 會在 Update-Database 應用 Migration時 出現Build錯誤。
默認使用:MSSQL Server 本地版,若是使用其它數據庫,還須要修改 appsettings.json 的鏈接字符串,Helpers\StartupHelpers.cs 中的UseSqlServer、UseNpgsql、UseSqlite、UseMySql 等。
1.3)在VS 的 "包管理控制檯",選擇 STS.Identity 項目,運行下列四命令,Migrations for IdentityServer configuration DbContext 與 persisted grants DbContext:
Add-Migration IdentityServerConfigurationDbInit -context IdentityServerConfigurationDbContext -output Data/Migrations/IdentityServerConfiguration Update-Database -context IdentityServerConfigurationDbContext
Add-Migration IdentityServerPersistedGrantsDbInit -context IdentityServerPersistedGrantDbContext -output Data/Migrations/IdentityServerGrants Update-Database -context IdentityServerPersistedGrantDbContext
1.4)User Login Configuration/Register Configuration 配置,經過 appsettings.json
User login column 配置用戶表中哪一個列表明登陸User,是 or UsernameEmail 。
User 用戶自行註冊,或者是統一註冊。
設置 設置電子郵件:SmtpConfiguration 或SendgridConfiguration。
二、公共項目:Skoruba.IdentityServer4.Admin.EntityFramework.Shared
在VS 的 "包管理控制檯",選擇 EntityFramework.Shared 項目,運行 數據遷移命令:Migrations for Asp.Net Core Identity DbContext: 這是 用戶及角色、權限有關的數據結構。
Add-Migration AspNetIdentityDbInit -context AdminIdentityDbContext -output Data/Migrations/Identity Update-Database -context AdminIdentityDbContext
三、管理界面項目 Skoruba.IdentityServer4.Admin
3.1)在VS 的 "包管理控制檯",選擇 Skoruba.IdentityServer4.Admin 項目,運行 數據遷移命令:Migrations for Logging DbContext 與 Migrations for AuditLogging DbContext
Add-Migration LoggingDbInit -context AdminLogDbContext -output Data/Migrations/Logging Update-Database -context AdminLogDbContext
Add-Migration AdminAuditLogDbInit -context AdminAuditLogDbContext -output Data/Migrations/AuditLogging Update-Database -context AdminAuditLogDbContext
3.2)種子數據:
A、修改啓動程序 -> , 取消註釋:
(踩坑注意:單獨啓動主項目,自行註冊了用戶,會致使 初始種子用戶 Admin 不會導入!,請刪除註冊的用戶後,從新運行。估計是插入初始數據時,會判斷數據庫中是否已有數據,有就不插了)
B、初始數據,放在 appsettings.json 文件中,
IdentityServerData 節是: 與 節是: Users (default admin 用戶名、密碼)Program.cs 文件MainDbMigrationHelpers.EnsureSeedData(host)ClientsResources;
IdentityData