You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止Duende Identity Server刷新令牌因密钥不可用失效?

解决Duende Identity Server 6刷新令牌因数据保护密钥问题过早失效的方案

针对你遇到的迁移数据保护存储到数据库后,Power Automate连接的刷新令牌1天内失效的问题,可以通过以下几个步骤解决:

1. 让Identity Server显式复用全局数据保护配置

Duende Identity Server默认会创建独立的数据保护实例,若未绑定到你配置的全局数据保护容器,会导致加密刷新令牌的密钥与数据库存储的密钥环不匹配,进而出现密钥无法找到的情况。需要在Identity Server配置中指定使用全局数据保护提供器:

services.AddIdentityServer()
    .AddDataProtectionProvider(options =>
    {
        // 必须与全局AddDataProtection的SetApplicationName值一致
        options.ApplicationDiscriminator = Configuration["ApplicationName"];
    })
    // 后续添加你的Identity Server其他配置(如AddInMemoryClients、AddInMemoryApiResources等)

2. 调整数据保护密钥的生命周期与留存策略

默认的数据保护密钥轮换策略可能过于频繁,导致新生成的密钥快速替换旧密钥,而未过期的刷新令牌仍依赖旧密钥解密,最终触发失效。可以修改配置延长密钥有效期并留存旧密钥:

services.AddDataProtection()
    .SetApplicationName(Configuration["ApplicationName"])
    .PersistKeysToDbContext<DataProtectionKeysContext>()
    .ProtectKeysWithCertificate(dataProtectionCertificate)
    .SetDefaultKeyLifetime(TimeSpan.FromDays(180)) // 设置新密钥有效期为180天,按需调整
    .SetKeyManagementOptions(options =>
    {
        options.RetiredKeyLifetime = TimeSpan.FromDays(365); // 旧密钥留存1年,确保过期令牌仍能解密
        options.AutoGenerateKeys = true; // 允许自动生成新密钥,但频率由DefaultKeyLifetime控制
    });

3. 验证客户端的刷新令牌有效期配置

检查Power Automate对应的Identity Server客户端配置,确认刷新令牌的生命周期参数未被错误设置为1天:

new Client
{
    ClientId = "your-powerautomate-client-id",
    // 其他客户端配置
    RefreshTokenExpiration = TokenExpiration.Sliding, // 滑动过期,按需选择
    AbsoluteRefreshTokenLifetime = 2592000, // 绝对有效期30天(单位:秒)
    SlidingRefreshTokenLifetime = 1296000, // 滑动有效期15天(单位:秒)
};

4. 确保数据保护密钥存储的完整性

检查数据库中DataProtectionKeys表的记录,确认所有生成的密钥都已正确持久化,没有出现密钥丢失或被意外清理的情况。若迁移前的Azure Blob存储中还有历史密钥,建议将其导入到数据库表中,避免旧令牌解密失败(针对迁移前已存在的令牌)。

内容的提问来源于stack exchange,提问作者Fraggel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:42:45