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

