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

Identity Server 4访问令牌生命周期设置异常问题咨询

问题原因解析

这是个很容易踩坑的细节问题,我来给你拆解清楚核心原因:

1. TimeSpan.Seconds 的真实含义

你踩的第一个坑是误解了TimeSpan类里Seconds属性的作用——它只返回时间跨度中「秒部分的数值」,范围固定是0-59,并不是整个时间跨度的总秒数。比如:

  • new TimeSpan(2, 0, 0) 代表2小时0分0秒,它的Seconds属性值是0(因为秒的部分本身就是0)
  • 哪怕是new TimeSpan(0, 1, 30),Seconds也只会返回30,而不是整个时间段的总秒数90

当你把这个值赋值给AccessTokenLifetime时,相当于传入了0,所以数据库Clients表中对应的字段会被设为0,自然达不到你想要的2小时有效期效果。

2. 正确用TimeSpan计算总秒数的方式

如果想用TimeSpan来推导总秒数,应该用TotalSeconds属性,它会返回整个时间跨度的总秒数(double类型),转成int后就能得到正确的值:

AccessTokenLifetime = (int)new TimeSpan(2, 0, 0).TotalSeconds // 结果为7200,与直接赋值效果一致

3. 直接赋值整数的合理性

直接写AccessTokenLifetime = 7200之所以有效,是因为这个参数本身就要求传入总秒数的整数值,你直接给出了2小时对应的总秒数,完全符合IdentityServer4的参数要求,数据库也能正确存储。

说白了就是你用错了TimeSpan的属性,把「秒分量」当成了「总秒数」,才导致了这个差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:51