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

Android应用使用AWS Amplify联合登录时如何获取永久凭证?

解决AWS临时凭证自动刷新问题,避免重复登录Google

首先明确:AWS没有永久凭证,所有通过身份池(Identity Pool)获取的凭证都是临时的,但可以通过静默刷新机制实现无需用户重复登录Google、自动更新AWS凭证的效果,具体方案如下:

  • 获取并保存Google刷新令牌
    首次通过CredentialManager完成Google登录时,必须请求离线访问权限(对应Google OAuth的access_type=offline参数),这样Google会返回刷新令牌(Refresh Token),CredentialManager会自动持久化保存该令牌。后续无需用户手动登录,就能通过这个刷新令牌静默获取新的Google Id Token。

  • 配置Amplify自动刷新AWS凭证
    Amplify Auth模块默认支持自动刷新临时AWS凭证,前提是能获取到有效的身份提供者(Google)令牌。你只需要:

    1. 实现一个令牌刷新回调,当Amplify检测到AWS凭证即将过期时,通过CredentialManager静默获取新的Google Id Token;
    2. 将新的Id Token传入federateToIdentityPool方法,Amplify会自动更新本地的AWS凭证,全程无需用户干预。
  • 关键代码示例
    静默获取新Google Id Token的核心逻辑:

    val request = GetCredentialRequest.Builder()
        .addCredentialOption(GoogleIdTokenCredentialOption.Builder()
            .setServerClientId("YOUR_GOOGLE_CLIENT_ID")
            .build())
        .build()
    
    credentialManager.getCredential(request, context, object : CredentialManagerCallback<GetCredentialResponse, GetCredentialException> {
        override fun onSuccess(response: GetCredentialResponse) {
            val idToken = (response.credential as GoogleIdTokenCredential).idToken
            // 将新的Id Token传入Amplify刷新凭证
            Amplify.Auth.federateToIdentityPool(
                idToken,
                AuthProvider.google(),
                { /* 刷新成功,无需额外操作 */ },
                { /* 处理刷新失败,比如提示用户重新登录 */ }
            )
        }
    
        override fun onError(e: GetCredentialException) {
            // 刷新令牌失效,需要引导用户重新登录
        }
    })
    
  • 注意事项

    • Google刷新令牌并非永久有效:如果用户主动退出登录、应用被移除权限、或者刷新令牌数量超过Google限制(每个用户每个应用默认最多50个),刷新令牌会失效,此时需要用户重新登录。
    • 确保Android应用的CredentialManager配置正确,允许持久化存储凭证,无需额外申请旧的GET_ACCOUNTS权限(Android 10+已废弃该权限)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:18:22