IGeekFan.AspNetCore.DataProtection.FreeSql
将 ASP.NET Core Data Protection 密钥存入关系型数据库。
功能概览
| 功能 | 说明 |
|---|---|
| 密钥存储 | Data Protection 密钥存入关系型数据库 |
| 数据库审计 | 密钥操作可审计追溯 |
| 集中式运维 | 统一数据库运维,无需额外组件 |
安装
dotnet add package IGeekFan.AspNetCore.DataProtection.FreeSql
快速开始
场景:单实例应用
1. 配置数据库
{
"ConnectionStrings": {
"Default": "Server=127.0.0.1;Port=3306;Database=app;Uid=root;Pwd=***;"
}
}
2. 注册服务
using FreeSql;
using Microsoft.AspNetCore.DataProtection;
var builder = WebApplication.CreateBuilder(args);
var fsql = new FreeSqlBuilder()
.UseConnectionString(DataType.MySql, builder.Configuration.GetConnectionString("Default"))
.Build();
builder.Services
.AddDataProtection()
.SetApplicationName("MyApp")
.PersistKeysToFreeSql(fsql);
var app = builder.Build();
app.Run();
场景:SQLite 轻量部署
var builder = WebApplication.CreateBuilder(args);
var fsql = new FreeSqlBuilder()
.UseConnectionString(DataType.Sqlite, "Data Source=dataprotection.db")
.Build();
builder.Services
.AddDataProtection()
.SetApplicationName("MyApp")
.PersistKeysToFreeSql(fsql);
高级配置
自定义密钥过期
builder.Services
.AddDataProtection()
.SetApplicationName("MyApp")
.SetDefaultKeyLifetime(TimeSpan.FromDays(90))
.PersistKeysToFreeSql(fsql);
多应用隔离
// 应用 A
builder.Services
.AddDataProtection()
.SetApplicationName("AppA")
.PersistKeysToFreeSql(fsql);
// 应用 B
builder.Services
.AddDataProtection()
.SetApplicationName("AppB")
.PersistKeysToFreeSql(fsql);
配置加密
builder.Services
.AddDataProtection()
.SetApplicationName("MyApp")
.ProtectKeysWithCertificate(new X509Certificate2("certificate.pfx", "password"))
.PersistKeysToFreeSql(fsql);
数据库表
| 表名 | 说明 |
|---|---|
DataProtectionKeys | 存储 Data Protection 密钥 |
运维建议
| 建议 | 说明 |
|---|---|
| 最小权限 | 数据库账号最小权限 |
| 定期备份 | 配置定期备份 |
| 密钥过期 | 与 Cookie 过期策略协同 |
| 监控 | 监控数据库连接状态 |
故障排查
| 问题 | 解决方案 |
|---|---|
| 表未创建 | 确保调用 CodeFirst.SyncStructure |
| 连接失败 | 检查数据库连接字符串 |
| 密钥丢失 | 检查数据库备份 |
| 性能问题 | 检查数据库连接池 |
相关文档
- DataProtection.FreeRedis - Redis 存储方案
- HealthChecks.FreeSql - 健康检查
- Core - 基础包
- 包能力矩阵