想學習 IdentityServer4 的身份服務器的開發,但正好處於 Net Core 發布 3.0,各種框架處於升級中。
IdentityServer4 盡提供了基礎的功能,界面UI 需要擴展,或者購買商業咨詢服務。Github 有幾個擴展的項目,其中兩個處於持續的更新中,包括升級 Net Core 3.0,分別是:brunohbrito/JPProject.IdentityServer4.SSO,
- Skoruba.IdentityServer4.STS.Identity
- Skoruba.IdentityServer4.Admin
- Skoruba.IdentityServer4.Admin.Api
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,是Username
orEmail 。
User 用戶自行注冊,或者是統一注冊。
設置 設置電子郵件:SmtpConfiguration 或
SendgridConfiguration。
2、公共項目: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
3、管理界面項目 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、修改啟動程序 Program.cs 文件
-> Main
, 取消注釋:DbMigrationHelpers.EnsureSeedData(host)
(踩坑注意:單獨啟動主項目,自行注冊了用戶,會導致 初始種子用戶 Admin 不會導入!,請刪除注冊的用戶后,重新運行。估計是插入初始數據時,會判斷數據庫中是否已有數據,有就不插了)
B、初始數據,放在 appsettings.json 文件中,
IdentityServerData 節是: Clients
與 Resources;
IdentityData
節是: Users (default admin 用戶名、密碼)