AWS 로그인 문제-로그인 중 토큰 연동 실패 java.lang.RuntimeException : 토큰 연동 오류-Android

Aug 20 2020

amplifyconfiguration.json에서 사용자 풀 ID를 변경 한 후 기존 사용자 풀의 경우 성공적으로 등록 할 수 있지만 로그인하는 동안이 오류가 발생합니다.

로그인을 위해 Amplify.Auth.signIn ( "*** ", " ", 결과-> {Log.i ( "AuthQuickstart", result.isSignInComplete ()? "로그인 성공 :"+ result.toString ( ) : "로그인이 완료되지 않았습니다."); if (result.isSignInComplete ()) {Toast.makeText (SplashActivity.this, "SignIn", Toast.LENGTH_LONG) .show ();}}, 오류-> Log.e ( "AuthQuickstart", error.toString ())); 이 mettod.

오류가 발생하는 것은 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) 

답변

MaradiyaKrupa Sep 10 2020 at 13:51

액세스 토큰을 얻기 위해 증폭하기 위해 로그인하는 경우 특정 사용자 풀의 토큰을 얻는 또 다른 방법이 있습니다. 사용자 이름과 암호를 사용하여 사용자 풀을 인증 할 수 있으며 다음과 같이 토큰을 요청할 수 있습니다.

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();
}