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

如何在oidc-client中判断Identity Token的过期时间?

查看Identity Server 3身份令牌(ID Token)过期时间的方法

嘿,我之前在使用Identity Server 3和oidc-client.js时也碰到过这个问题,给你两个实用的办法来获取ID Token的过期时间:

方法一:用oidc-client内置的getIdTokenClaims()方法

这是官方推荐的最便捷方式,oidc-client已经封装好了ID Token的解析逻辑:

  • 从你已获取的user实例中调用getIdTokenClaims(),它会返回包含所有ID Token声明的对象
  • 直接访问该对象的exp属性,这是一个秒级Unix时间戳,转成可读日期即可

示例代码:

// 假设你已经通过oidc-client拿到了user对象
const idTokenClaims = user.getIdTokenClaims();
// 将秒级时间戳转为毫秒级,生成可读的Date对象
const idTokenExpiryTime = new Date(idTokenClaims.exp * 1000);
console.log("身份令牌过期时间:", idTokenExpiryTime.toLocaleString());

方法二:手动解码原始ID Token

如果因为特殊场景无法使用内置方法,你可以手动解码JWT格式的ID Token(ID Token本身就是标准JWT):

  • 从user对象的id_token属性拿到原始的ID Token字符串
  • JWT由header.payload.signature三部分组成,拆分后解码中间的payload部分(注意处理base64url编码的特殊字符)

示例代码:

const rawIdToken = user.id_token;
// 拆分JWT,只取中间的payload部分
const [, payloadPart] = rawIdToken.split('.');
// 把base64url格式转换为标准base64格式
const standardBase64 = payloadPart.replace(/-/g, '+').replace(/_/g, '/');
// 解码并转为JSON对象
const idTokenPayload = JSON.parse(atob(standardBase64));
// 转换过期时间为可读格式
const expiryDate = new Date(idTokenPayload.exp * 1000);
console.log("身份令牌过期时间:", expiryDate.toLocaleString());

补充说明

  • exp是JWT标准的过期声明,存储的是秒级Unix时间戳,必须乘以1000才能被JavaScript的Date对象正确解析
  • Identity Server 3默认的ID Token生命周期是300秒(5分钟),你也可以在客户端配置里设置IdentityTokenLifetime来修改这个时长

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:35:00