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
相关产品推荐
相关产品推荐

