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

使用AccessToken和RefreshToken在Amplify Auth Android中设置会话

在Android Amplify Auth SDK中导入自定义获取的Cognito令牌

要将自定义认证得到的AccessToken和RefreshToken导入Amplify Auth Android SDK,核心是构建Cognito会话实例并绑定到SDK的用户对象中,具体步骤如下:

1. 确认依赖配置

确保项目已引入必要依赖(通常在build.gradle中):

dependencies {
    // Amplify Auth Cognito插件
    implementation 'com.amplifyframework:auth-cognito:2.+'
    // AWS Cognito身份提供者核心依赖
    implementation 'com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.+'
}

2. 获取CognitoUserPool实例

可通过Amplify已配置的插件获取,或手动构建用户池:

// 方式1:从Amplify插件中读取已配置的用户池
val authPlugin = Amplify.Auth.getPlugin("awsCognitoAuthPlugin") as AWSCognitoAuthPlugin
val userPool = authPlugin.userPool

// 方式2:手动构建(适用于未通过Amplify初始化配置的场景)
val userPool = CognitoUserPool(
    applicationContext,
    "你的用户池ID",
    "你的客户端ID",
    "你的客户端密钥", // 无密钥则传null
    Regions.你的区域 // 例如 Regions.US_WEST_2
)

3. 构建CognitoUserSession会话

将令牌字符串转换为SDK所需的令牌对象,再构建会话:

// 传入自定义认证得到的令牌字符串
val accessToken = AccessToken.create("你的AccessToken字符串")
val refreshToken = RefreshToken.create("你的RefreshToken字符串")

// 组装成Cognito会话对象(若有ID Token可传入第三个参数)
val cognitoUserSession = CognitoUserSession(accessToken, refreshToken)

4. 绑定会话到用户完成认证

从用户池中获取对应用户,将会话绑定到该用户:

// 从AccessToken的Payload中解析用户ID,也可直接传入已知用户ID
val userId = accessToken.payload.sub
val cognitoUser = userPool.getUser(userId)

// 绑定会话并完成认证流程
cognitoUser.signInUserSession(cognitoUserSession, object : AuthenticationHandler {
    override fun onSuccess(session: CognitoUserSession?, user: CognitoUser?) {
        // 会话设置成功,此时Amplify Auth已识别登录状态
        // 可调用Amplify.Auth.getCurrentSession()或Amplify.Auth.getCurrentUser()验证
    }

    override fun getAuthenticationDetails(
        continuation: AuthenticationContinuation?,
        userId: String?
    ) {
        // 无需处理,直接传入有效会话即可
    }

    override fun getMFACode(continuation: MultiFactorAuthenticationContinuation?) {
        // 无需处理,自定义认证已完成多因子验证(若有)
    }

    override fun onFailure(exception: Exception?) {
        // 处理绑定失败场景,比如令牌过期、格式错误等
        exception?.printStackTrace()
    }
})

注意事项

  • 确保传入的令牌未过期且格式合法,否则会触发onFailure回调
  • 绑定会话后,Amplify Auth的所有API(如Auth.signOut()、Auth.fetchAuthSession())均可正常使用该会话
  • 若自定义认证流程包含ID Token,可将其传入CognitoUserSession构造方法的第三个参数,完善会话信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:15:32