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

如何在AWS中续期凭证?AWS Unity SDK STS凭证过期无法更新问题咨询

问题出现的原因

  • AWS Unity SDK默认会将STS临时凭证持久化缓存到Unity PlayerPrefs 中,缓存逻辑优先读取本地存储的旧凭证,不会主动校验凭证有效性后再触发新凭证申请,默认也没有过期自动清理机制
  • 多数开发者的登出逻辑仅会清理自研逻辑存储的Cognito用户token,不会同步清理SDK侧缓存的STS凭证,重新登录后SDK仍会调用旧的过期凭证发起资源访问请求
  • 若应用使用单例模式初始化AmazonDynamoDBClient等AWS服务客户端,客户端实例会绑定初始化阶段传入的凭证对象,后续即便更新了全局凭证配置,已初始化的客户端也不会自动替换绑定的凭证,会持续使用过期凭证发起请求
  • Cognito身份池默认配置的STS凭证最长有效期为3天,与你遇到的3~4天触发故障的时间点完全吻合

解决操作

1. 完善登出流程,强制清空所有凭证缓存

登出时除清除自研逻辑存储的Cognito用户token外,必须同步调用SDK接口清除所有凭证缓存,执行完清理后再重新走登录流程:

// 清理当前Cognito凭证实例的缓存
if (cognitoCredentialsInstance != null)
{
    cognitoCredentialsInstance.Clear();
}
// 清理SDK全局凭证缓存
Amazon.Runtime.Internal.CredentialsCache.ClearCredentials();
// 清理Unity本地持久化存储中的SDK凭证缓存
PlayerPrefs.DeleteKey("AWSCredentials");
PlayerPrefs.Save();

2. 开启凭证自动刷新能力

初始化CognitoAWSCredentials时配置提前刷新逻辑,SDK会在凭证接近过期时自动使用当前有效的Cognito ID Token换取新的STS凭证,无需手动触发续期:

var cognitoCredentials = new CognitoAWSCredentials(
    yourCognitoIdentityId,
    yourAwsRegion
);
// 配置凭证过期前10分钟自动刷新
cognitoCredentials.PreemptExpiryTime = TimeSpan.FromMinutes(10);

3. 优化AWS服务客户端初始化逻辑

避免全局复用单例AmazonDynamoDBClient实例,可选择两种优化方案:

  • 每次发起AWS资源请求前,使用当前有效的凭证对象新建服务客户端
  • 每次登录完成/凭证刷新完成后,重新初始化所有AWS服务客户端,确保客户端绑定最新的有效凭证

4. 新增异常兜底处理逻辑

在所有调用AWS资源的业务逻辑中捕获AmazonServiceException,当异常错误码为ExpiredToken或InvalidSignatureException时,自动触发上述凭证清理+重新登录流程,无需用户手动清理应用数据或重启应用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:06