Android 放大身份验证(Cognito)-“;联合令牌时出错";在登录期间
我们正在尝试在Android上配置AWS Amplify Authentication(Cognito),但当我们尝试使用有效的用户名和密码登录用户时,onResult回调将使用等于signInState.DONE的signInState调用,但当我们尝试获取令牌(同步或异步)时,会引发异常:“getTokens不支持在注销时检索令牌” 在日志中查看,似乎出现了未处理的异常,并且似乎被忽略(因为登录状态为“已完成”): java.lang.RuntimeException:联合令牌时出错。 位于com.amazonaws.mobile.client.AWSMobileClient$8.run(AWSMobileClient.java:1484) 位于com.amazonaws.mobile.client.internal.InternalCallback.await(InternalCallback.java:115) 在com.amazonaws.mobile.client.AWSMobileClient.FederatedSignin上,不指定状态(AWSMobileClient.java:1414) 在com.amazonaws.mobile.client.AWSMobileClient$6$1.onSuccess(AWSMobileClient.java:1156) 在com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser.getSession(CognitoUser.java:745)上 位于com.amazonaws.mobile.client.AWSMobileClient$6.run(AWSMobileClient.java:1142) 位于com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101) 运行(Thread.java:818) 原因:com.amazonaws.services.cognitorizedexception.model.NotAuthorizedException:令牌不是来自此标识池的受支持提供商。(服务:AmazonCognitoIdentity;状态代码:400;错误代码:NotAuthorizedException;请求ID:3c924e1f-70ea-11e9-80ca-01ad7f96c8b7) 在com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:730) 在com.amazonaws.http.AmazonHttpClient.executeHelper上(AmazonHttpClient.java:405) 在com.amazonaws.http.AmazonHttpClient.execute上(AmazonHttpClient.java:212) 在com.amazonaws.services.cognitoidentity.amazoncognitionidentityclient.invoke(amazoncognitionidentityclient.java:1658) 在com.amazonaws.services.cognitoidentity.amazoncognitionidentityclient.getId(amazoncognitionidentityclient.java:739) 位于com.amazonaws.auth.AWSAbstractCognitoIdentityProvider.getIdentityId(AWSAbstractCognitoIdentityProvider.java:172) 位于com.amazonaws.mobile.client.AWSMobileClientCognitoIdentityProvider.refresh(AWSMobileClient.java:3600) 在com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:678) 在com.amazonaws.auth.CognitoCredentialsProvider.refresh(CognitoCredentialsProvider.java:631) 在com.amazonaws.auth.CognitoCachingCredentialsProvider.refresh(CognitoCachingCredentialsProvider.java:510) 位于com.amazonaws.mobile.client.AWSMobileClient.federateWithCognitoIdentity(AWSMobileClient.java:1515) 位于com.amazonaws.mobile.client.AWSMobileClient$8.run(AWSMobileClient.java:1471) 我的配置: build.gradle(应用程序) MainApplication.kt(扩展应用程序)Android 放大身份验证(Cognito)-“;联合令牌时出错";在登录期间,android,authentication,amazon-cognito,aws-amplify,Android,Authentication,Amazon Cognito,Aws Amplify,我们正在尝试在Android上配置AWS Amplify Authentication(Cognito),但当我们尝试使用有效的用户名和密码登录用户时,onResult回调将使用等于signInState.DONE的signInState调用,但当我们尝试获取令牌(同步或异步)时,会引发异常:“getTokens不支持在注销时检索令牌” 在日志中查看,似乎出现了未处理的异常,并且似乎被忽略(因为登录状态为“已完成”): java.lang.RuntimeException:联合令牌时出错。 位于
请检查您的身份池ID是否正确(即使您没有使用来宾访问)在app->src->res->raw->
configuration.json
&awscoconfiguration.json
。您可以在AWS控制台->cognito->管理标识池->单击您的池->单击示例代码。之后,我的状态从已注销更改为已登录:
我在使用Amplify API时遇到了同样的问题(能够登录但无法获取令牌)。
固定的
1.转到您的身份池并选择编辑
2.将你的“用户池”和“应用程序客户端”添加为身份验证提供商之一你找到了解决方案吗?嗨,不幸的是没有。我在Amplify's Github中也遇到了一个问题:我在我的应用程序中面临同样的问题。如果你找到了解决方案,请在此处发布你的答案。有没有解决方案?我有一个类似的问题,我的解决方案是更新身份配置文件中的池Id。
implementation "com.amazonaws:aws-android-sdk-mobile-client:2.13.4"
implementation "com.amazonaws:aws-android-sdk-auth-userpools:2.13.4"
AWSMobileClient.getInstance().initialize(applicationContext, object : Callback<UserStateDetails> {
override fun onError(e: Exception?) {
Timber.e(e, "An error occurred while tried to init the AWSMobileClient")
}
override fun onResult(result: UserStateDetails?) {
Timber.d("Successfully started the AWSMobileClient: ${result?.userState}") // Reaches here with SIGNED_OUT
}
})
suspend fun signInOnCognito(email: String, password: String): String =
suspendCoroutine { continuation ->
val signInCallback = object : Callback<SignInResult> {
override fun onResult(result: SignInResult) {
Timber.d("Sign in result: ${result.signInState}") // <---- DONE
fetchToken(continuation)
}
override fun onError(exception: java.lang.Exception) {
continuation.resumeWithException(exception)
}
}
AWSMobileClient.getInstance().signIn(email, password, null, signInCallback)
}
fun fetchToken(continuation: Continuation<String>) {
val getTokensCallback = object : Callback<Tokens> {
override fun onResult(result: Tokens) {
Timber.d("Got the user token")
continuation.resume(result.idToken.tokenString)
}
override fun onError(e: Exception) {
Timber.e(e, "Cannot get the user token")
continuation.resumeWithException(e)
}
}
AWSMobileClient.getInstance().getTokens(getTokensCallback) // <---- EXCEPTION
}
{
"UserAgent": "aws-amplify-cli/0.1.0",
"Version": "1.0",
"IdentityManager": {
"Default": {}
},
"CredentialsProvider": {
"CognitoIdentity": {
"Default": {
"PoolId": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"Region": "us-east-1"
}
}
},
"CognitoUserPool": {
"Default": {
"PoolId": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"AppClientId": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"AppClientSecret": "XXXXXXXXXXXXXXXXXXXXXXXXXX",
"Region": "us-east-1"
}
}
}