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

AWS Cognito刷新令牌到期前续期问题咨询

关于AWS Cognito与Salesforce刷新令牌续期及长期身份验证的解决方案

一、AWS Cognito/Salesforce的内置刷新令牌续期机制

AWS Cognito

Cognito默认支持刷新令牌轮换,只要在原刷新令牌有效期内调用refreshToken或initiateAuth接口获取新访问令牌时,会自动返回一个新的刷新令牌——新令牌的有效期从调用时刻重新计算30天,相当于完成续期。注意:如果用户池关闭了令牌轮换功能,每次刷新只会生成新的访问令牌,原刷新令牌不会更新,到期后直接失效。

Salesforce

Salesforce的刷新令牌同样支持自动续期,核心取决于Connected App的配置:

  • 若设置Refresh Token Policy为Refresh Token is valid until revoked,刷新令牌会长期有效,每次用旧令牌刷新时都会生成新的持久化刷新令牌;
  • 若配置了固定有效期(比如30天),每次刷新也会返回一个新的、有效期重置为30天的刷新令牌;
  • 只有当设置为One-Time Use时,刷新令牌仅能使用一次,无法续期。

二、实现刷新令牌的定期续期

核心思路

不要等刷新令牌快到期才处理,建议在访问令牌过期前/过期时触发刷新操作——此时不仅能获取新的访问令牌,还能同步续期刷新令牌(前提是开启了令牌轮换)。

具体实现步骤

  1. 存储令牌元数据:客户端保存刷新令牌、访问令牌及其过期时间(可从ID Token的exp字段解析,或直接记录令牌获取时间+有效期);
  2. 前置检查机制:每次调用受保护资源前,先判断访问令牌是否即将过期(比如剩余时间小于5分钟);
  3. 触发刷新流程:若访问令牌过期/即将过期,调用对应平台的刷新接口,用旧刷新令牌换取新的访问令牌和刷新令牌;
  4. 更新本地存储:替换旧令牌,更新过期时间,后续请求使用新令牌。

代码示例(AWS Cognito + Amplify)

import { Auth } from 'aws-amplify';

async function autoRefreshTokens() {
  try {
    const user = await Auth.currentAuthenticatedUser();
    const session = await Auth.currentSession();
    
    // 检查访问令牌剩余有效期是否小于5分钟(300秒)
    const accessTokenExpires = session.getAccessToken().getExpiration();
    const now = Date.now() / 1000;
    
    if (accessTokenExpires - now < 300) {
      // 刷新令牌,获取新的会话
      const newSession = await Auth.refreshSession(user.getRefreshToken());
      
      // 更新本地存储的令牌
      localStorage.setItem('accessToken', newSession.getAccessToken().getJwtToken());
      localStorage.setItem('refreshToken', newSession.getRefreshToken().getToken());
    }
  } catch (err) {
    console.error('令牌刷新失败:', err);
    // 刷新失败时,引导用户重新验证(比如生物识别、短信验证)
  }
}

// 页面加载或每次请求前调用
autoRefreshTokens();

三、类似Gmail的无缝长期身份验证实现

Gmail这类平台的长期身份验证核心是持久化刷新令牌+静默智能续期,结合以下几点落地:

  1. 配置长期有效刷新令牌:
    • Cognito:在用户池的App客户端设置中,将Refresh token expiration调至最大值(10年),同时开启Token rotation;
    • Salesforce:将Connected App的Refresh Token Policy设为Refresh Token is valid until revoked,让刷新令牌永久有效(除非主动吊销);
  2. 后台静默续期:
    • 客户端在后台定期检查令牌状态,或监听页面激活事件(比如用户打开浏览器标签时),自动触发刷新流程,全程无需用户干预;
  3. 信任设备机制:
    • 首次登录后,在设备上持久化存储刷新令牌(比如浏览器的localStorage或原生APP的密钥链),标记为信任设备,后续无需重复输入密码;
  4. 安全降级处理:
    • 当刷新令牌失效(比如被吊销、设备变更),引导用户通过无密码方式验证(如生物识别、短信验证码),而非强制输入账号密码,兼顾安全与体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:29:59