跳到主要内容

IGeekFan.AspNetCore.DataProtection.FreeRedis

将 ASP.NET Core Data Protection 密钥存入 Redis。

功能概览

功能说明
密钥存储Data Protection 密钥存入 Redis
多实例共享跨实例共享认证 Cookie
弹性扩缩容器环境下的密钥同步

安装

dotnet add package IGeekFan.AspNetCore.DataProtection.FreeRedis

快速开始

场景:多实例部署

1. 配置 Redis

{
"ConnectionStrings": {
"Redis": "127.0.0.1:6379,password=***,defaultDatabase=0"
}
}

2. 注册服务

using FreeRedis;
using Microsoft.AspNetCore.DataProtection;

var builder = WebApplication.CreateBuilder(args);

var redis = new RedisClient(builder.Configuration.GetConnectionString("Redis"));

builder.Services
.AddDataProtection()
.SetApplicationName("MyApp")
.PersistKeysToFreeRedis(redis, "DataProtection-Keys");

var app = builder.Build();

app.Run();

场景:Redis 集群

var builder = WebApplication.CreateBuilder(args);

var redis = new RedisClient(new RedisConnectionString
{
Host = "redis-cluster.example.com",
Port = 6379,
Password = "your-password",
DefaultDatabase = 0,
Ssl = true
});

builder.Services
.AddDataProtection()
.SetApplicationName("MyApp")
.PersistKeysToFreeRedis(redis, "DataProtection-Keys");

高级配置

自定义密钥过期

builder.Services
.AddDataProtection()
.SetApplicationName("MyApp")
.SetDefaultKeyLifetime(TimeSpan.FromDays(90))
.PersistKeysToFreeRedis(redis, "DataProtection-Keys");

多应用隔离

// 应用 A
builder.Services
.AddDataProtection()
.SetApplicationName("AppA")
.PersistKeysToFreeRedis(redis, "DataProtection-Keys-AppA");

// 应用 B
builder.Services
.AddDataProtection()
.SetApplicationName("AppB")
.PersistKeysToFreeRedis(redis, "DataProtection-Keys-AppB");

密钥轮换

builder.Services
.AddDataProtection()
.SetApplicationName("MyApp")
.SetDefaultKeyLifetime(TimeSpan.FromDays(30))
.PersistKeysToFreeRedis(redis, "DataProtection-Keys")
.SetLifecycle(new DataProtectionKeyRingLifetime());

运维建议

建议说明
一致性SetApplicationName 在同一集群保持一致
高可用Redis 启用持久化与高可用
安全生产环境启用 TLS
备份定期备份 Redis 数据
监控监控 Redis 内存和连接数

故障排查

问题解决方案
连接失败检查 Redis 连接字符串
认证失败检查 Redis 密码
密钥丢失检查 Redis 持久化配置
性能问题检查 Redis 内存和连接数

相关文档