IdentityServer4 身份验证及授权管理
该应用程序框架为 Asp.Net Core MVC - using .NET Core 3.1,数据访问采用Dapper Repository模式实现的Identity Server4 Storage
- 安装 最新的.NET Core 3.x SDK(使用旧版本在IIS上托管时可能会导致502.5错误,或者在自托管时启动后立即退出应用程序)
- 设置
DbMigration
为启动项目 - 配置文件夹
Factories
里面需要使用的数据库类型的连接字符串,如:
public class SqlServerDbContextFactory : IDesignTimeDbContextFactory<SqlServerDbContext>
{
public SqlServerDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<SqlServerDbContext>();
// 自己修改数据库连接串
optionsBuilder.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=IdentityServer4.Admin;Integrated Security=True;");
return new SqlServerDbContext(optionsBuilder.Options);
}
}
- 然后使用相关迁移命令生成数据库,详情查看
迁移命令.txt
文件
- 设置启动项目:
- IdentityServer.Admin
- IdentityServer.AuthIdentity
- 启动后自动配置默认Client(客户端),IdentityResource(身份资源),ApiResource(API 资源),ApiScope(API 作用域),用户信息及都语言(默认English)
- 项目已添加对应
Dockerfile
文件,可自行打包生成镜像,关于持续集成跟发布可观看我录制的教学视频系列
- 后台UI来自于开源项目skoruba/IdentityServer4.Admin,在此表示深深感谢他们的付出,让我学习了不少
- 身份验证及授权服务端
当前使用自己生成的本地证书,证书如果失效可以采取临时证书或者自行添加新证书替换
线上可以使用免费证书 Let's Encypt. 然后Nginx配置即可,推荐配置教程Secure Nginx with Let's Encrypt on CentOS 7
-
当前解决方案采用Dapper的Repository模式:
RepositoryDataTypeBase<T>
: Repository抽象类,定义数据库类型,默认表名称及实现数据库连接RepositoryBase
: Repository基类,定义数据操作的基本增删改查ClientRepository
: 具体业务Repository实现类
- SqlServer
- MySql
- PostgreSQL
- Oracle
- SQLite
- Firebird
数据库配置文件
appsettings.json
:
"DbConnectionConfiguration": {
"CurrentDataProviderType": 1, // 1: SqlServer, 2: MySql, 3: Oracle ...
"MasterSqlServerConnString": "Data Source=.;Initial Catalog=IdentityServer4.Admin;Integrated Security=True;",
"MasterMySqlConnString": ""
}
备注:因这里使用的SqlKata生成数据库语句,当前实现仅为SqlServer,其他类型类似
- 在
appsettings.json
中更改IdentityServer和身份验证设置的特定URL和名称 AuthorizationConstant.AdministrationPolicy
定义用户的角色常量, 配置值在appsettings.json
-AdministrationRole
IdentityServer.Admin.identityserverdata.json
配置Client(客户端),IdentityResource(身份资源),ApiResource(API 资源),ApiScope(API 作用域)相关信息
数据库保护文件存为文件系统,配置目录在:
"DataProtectionPath": "~/App_Data/DataProtectionKeys"
- 日志采用Serilog组件,保存在项目当前目录的Logs文件夹下,默认每天生成对应日志,需要时手动自行清理或者写个任务计划清理
- 后台与服务端均包含端点“运行状况”,用于检查数据库和IdentityServer。
- English(当前默认,项目启动自动生成)
- 更多后续添加
-
身份验证跟授权:
SIdentityServer.AuthIdentity
- 包含IdentityServer4实例并结合这些示例的项目 - Quickstart UI for the IdentityServer4 with Asp.Net Core Identity and EF Core storage
-
后台:
-
IdentityServer.Admin
- 包含管理界面的ASP.NET Core MVC应用程序 -
IdentityServer.Admin.Core
- 数据实体,配置类,Dto类,常量及一些扩展类 -
IdentityServer.Admin.Dapper
- 数据访问相关 -
IdentityServer.Admin.Services
- 业务逻辑相关
-
Clients
可以根据客户端类型定义配置-默认情况下使用客户端类型:
- 空
- Web应用程序-服务器端-PKCE的授权代码流
- 单页应用程序-Javascript-带有PKCE的授权代码流
- 本地应用程序-移动/桌面-混合流
- 设备/机器-客户端凭证流
- T电视和受限输入设备应用程序-设备流程
- 多语言化
- 添加用户/角色 权限
- ...
该项目根据以下条款获得许可 MIT license.
注意: 该存储库使用来自https://github.com/IdentityServer/IdentityServer4.Quickstart.UI的源代码,该源代码受 Apache License 2.0.
此Web应用程序基于以下项目:
- ASP.NET Core
- Dapper
- SqlKata
- AutoMapper
- FluentVaidation
- Autofac
- Serilog
感谢 Dominick Baier 和 Brock Allen -IdentityServer4的创建者以及skoruba.
有任何问题或者协助欢迎联系:
作者:HuangZhongQiu
QQ 邮箱: 875755898@qq.com
Google 邮箱:huangzhongqiu25@gmail.com
个人微信小程序 - 诗词海洋(个人兴趣):
如果您觉得这项目对你有帮助,你懂的嘿