Masalah Masuk AWS - Gagal menggabungkan token selama masuk java.lang.RuntimeException: Kesalahan dalam menggabungkan token. - Android

Aug 20 2020

Setelah mengubah ID kumpulan pengguna di amplifyconfiguration.json Untuk kumpulan pengguna yang sudah ada, saya dapat berhasil mendaftar tetapi saat melakukan Masuk, saya mendapatkan kesalahan ini.

untuk masuk saya menggunakan Amplify.Auth.signIn ("*** ", " ", result -> {Log.i ("AuthQuickstart", result.isSignInComplete ()? "Berhasil masuk:" + result.toString ( ): "Masuk belum selesai"); if (result.isSignInComplete ()) {Toast.makeText (SplashActivity.this, "SignIn", Toast.LENGTH_LONG) .show ();}}, error -> Log.e ( "AuthQuickstart", error.toString ())); mettod ini.

mendapatkan kesalahan itu seperti 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) 

Jawaban

MaradiyaKrupa Sep 10 2020 at 13:51

Jika Anda masuk untuk memperkuat hanya untuk mendapatkan token akses, maka ada satu cara lagi untuk mendapatkan token dari kumpulan pengguna tertentu. Anda dapat mengotentikasi kumpulan pengguna menggunakan nama pengguna dan kata sandi dan kemudian Anda dapat meminta token seperti di bawah ini:

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