跳到主要内容

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
连接失败检查数据库连接字符串
密钥丢失检查数据库备份
性能问题检查数据库连接池

相关文档