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

配置14天有效期的JWT token为何1小时左右就失效需刷新?

解决方案

你遇到的1小时失效问题,90%以上的场景是以下两个配置遗漏导致的,按顺序排查修改即可:

1. 修正ApplicationOAuthProvider中的Ticket有效期配置

你在OAuthOptions中配置的AccessTokenExpireTimeSpan不会自动生效,需要在自定义的ApplicationOAuthProvider的GrantResourceOwnerCredentials方法中,手动为生成的身份验证Ticket指定过期时间,默认未配置的话就是1小时有效期:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    // 原有用户名密码校验逻辑保留
    var user = await UserManager.FindAsync(context.UserName, context.Password);
    if (user == null)
    {
        context.SetError("invalid_grant", "用户名或密码错误");
        return;
    }

    var identity = new ClaimsIdentity(context.Options.AuthenticationType);
    identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
    // 其他自定义Claim添加逻辑保留

    // 新增以下配置:绑定OAuthOptions中设置的有效期
    var authProps = new AuthenticationProperties
    {
        IssuedUtc = DateTimeOffset.UtcNow,
        // 直接使用你在OAuthOptions中配置的过期时长,后续改这里的配置即可统一生效
        ExpiresUtc = DateTimeOffset.UtcNow.Add(context.Options.AccessTokenExpireTimeSpan)
    };

    var ticket = new AuthenticationTicket(identity, authProps);
    context.Validated(ticket);
}

修改完成后可以生成token后到JWT解析工具查看payload中的exp字段,确认过期时间是否符合预期。

2. 配置固定的机器密钥避免签名校验失败

如果token的exp字段是正确的14天/7天后的时间戳,但还是1小时左右失效,那是IIS默认的机器密钥自动生成机制导致的:默认配置下ASP.NET会在应用池回收、站点重启时自动生成新的机器密钥,而JWT的签名校验依赖该密钥,密钥变更后之前签发的所有token都会校验失败返回401。

在web.config的system.web节点下添加固定机器密钥配置即可解决:

<system.web>
  <machineKey 
    validationKey="自行生成的64位十六进制字符串" 
    decryptionKey="自行生成的32位十六进制字符串" 
    validation="SHA256" 
    decryption="AES" />
</system.web>

提示:机器密钥可以通过IIS管理器的「机器密钥」功能自动生成,也可以用随机十六进制生成工具生成,生产环境注意保密密钥不要泄露。

3. 调整为7天有效期

完成上述两步配置后,只需要修改OAuthOptions中的AccessTokenExpireTimeSpan为TimeSpan.FromDays(7)即可实现7天有效期的需求:

AccessTokenExpireTimeSpan = TimeSpan.FromDays(7),

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:09:02