Проблема со входом в AWS - не удалось объединить токены во время входа java.lang.RuntimeException: ошибка объединения токена - Android
После изменения идентификатора пула пользователей в ampifyconfiguration.json Для существующего пула пользователей я могу успешно зарегистрироваться, но при входе в систему я получаю эту ошибку.
для входа я использую Amplify.Auth.signIn ("*** ", " ", result -> {Log.i ("AuthQuickstart", result.isSignInComplete ()? "Успешный вход:" + result.toString ( ): «Вход не завершен»); if (result.isSignInComplete ()) {Toast.makeText (SplashActivity.this, «SignIn», Toast.LENGTH_LONG) .show ();}}, ошибка -> Log.e ( «AuthQuickstart», error.toString ())); этот метод.
получение ошибки похоже на W/AWSMobileClient: Failed to federate tokens during sign-in java.lang.RuntimeException: Error in federating the token. at com.amazonaws.mobile.client.AWSMobileClient$10.run(AWSMobileClient.java:1716) at com.amazonaws.mobile.client.internal.InternalCallback.await(InternalCallback.java:115) at com.amazonaws.mobile.client.AWSMobileClient.federatedSignInWithoutAssigningState(AWSMobileClient.java:1644) at com.amazonaws.mobile.client.AWSMobileClient$6$1.onSuccess(AWSMobileClient.java:1191) at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser.getSession(CognitoUser.java:1020) at com.amazonaws.mobile.client.AWSMobileClient$6.run(AWSMobileClient.java:1176) at com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101) at java.lang.Thread.run(Thread.java:761) Caused by: com.amazonaws.services.cognitoidentity.model.InvalidIdentityPoolConfigurationException: Invalid identity pool configuration. Check assigned IAM roles for this pool. (Service: AmazonCognitoIdentity; Status Code: 400; Error Code: InvalidIdentityPoolConfigurationException; Request ID: e413*******************) at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:731) at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:405) at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:212) at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:1728) at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getCredentialsForIdentity(AmazonCognitoIdentityClient.java:750) at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithCognito(CognitoCredentialsProvider.java:783) at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:695) at com.amazonaws.auth.CognitoCredentialsProvider.refresh(CognitoCredentialsProvider.java:632) at com.amazonaws.auth.CognitoCachingCredentialsProvider.refresh(CognitoCachingCredentialsProvider.java:511) at com.amazonaws.auth.CognitoCachingCredentialsProvider.getIdentityId(CognitoCachingCredentialsProvider.java:453) at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithCognito(CognitoCredentialsProvider.java:777) at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:695) at com.amazonaws.auth.CognitoCredentialsProvider.refresh(CognitoCredentialsProvider.java:632) at com.amazonaws.auth.CognitoCachingCredentialsProvider.refresh(CognitoCachingCredentialsProvider.java:511) at com.amazonaws.mobile.client.AWSMobileClient.federateWithCognitoIdentity(AWSMobileClient.java:1747) at com.amazonaws.mobile.client.AWSMobileClient$10.run(AWSMobileClient.java:1703) at com.amazonaws.mobile.client.internal.InternalCallback.await(InternalCallback.java:115) at com.amazonaws.mobile.client.AWSMobileClient.federatedSignInWithoutAssigningState(AWSMobileClient.java:1644) at com.amazonaws.mobile.client.AWSMobileClient$6$1.onSuccess(AWSMobileClient.java:1191) at com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser.getSession(CognitoUser.java:1020) at com.amazonaws.mobile.client.AWSMobileClient$6.run(AWSMobileClient.java:1176) at com.amazonaws.mobile.client.internal.InternalCallback$1.run(InternalCallback.java:101) at java.lang.Thread.run(Thread.java:761)
Ответы
Если вы входите в систему только для получения токена доступа, то есть еще один способ получить токен определенного пользовательского пула. Вы можете аутентифицировать пул пользователей, используя имя пользователя и пароль, а затем вы можете запросить токен, как показано ниже:
public class AWSService {
public IdentityManager identityManager ;
public AWSCredentialsProvider credentialsProvider ;
public AWSConfiguration awsConfiguration;
public AWSService(Context context) {
awsConfiguration = new AWSConfiguration(context);
identityManager = new IdentityManager(context, awsConfiguration);
identityManager.addSignInProvider(CognitoUserPoolsSignInProvider.class);
IdentityManager.setDefaultIdentityManager(identityManager);
credentialsProvider = identityManager.getCredentialsProvider();
}}
public static void getAccessToken(Context context, int requestCode, GetUserPoolTokenListener getUserPoolTokenListener) {
AWSService awsService=new AWSService(context);
CognitoUserPool cognitoUserPool=new CognitoUserPool(context,
awsService.awsConfiguration);
AuthenticationDetails authDetails = new AuthenticationDetails(PreferenceUtils.getStringPref(context,Constants.USER_NAME), PreferenceUtils.getStringPref(context,Constants.PASSWORD), null);
final CognitoUser cognitoUser = cognitoUserPool.getUser();
cognitoUser.initiateUserAuthentication(authDetails, new AuthenticationHandler() {
@Override
public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice) {
Log.e("aws","onSuccess : "+userSession.getIdToken().getExpiration().getTime());
}
@Override
public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) {
Log.e("aws","getAuthenticationDetails : "+authenticationContinuation);
}
@Override
public void getMFACode(MultiFactorAuthenticationContinuation continuation) {
Log.e("aws","getMFACode : "+continuation);
}
@Override
public void authenticationChallenge(ChallengeContinuation continuation) {
Log.e("aws","authenticationChallenge : "+continuation);
}
@Override
public void onFailure(Exception exception) {
Log.e("aws","onFailure : "+exception);
}
}, true).run();
}