想学习 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 的连接字符串,HelpersStartupHelpers.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 用户名、密码)