使用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
相关产品推荐
相关产品推荐

