Amplify Authentication (Cognito) - «Ошибка объединения токена» во время входа - PullRequest
1 голос
/ 08 мая 2019

мы пытаемся настроить AWS Amplify Authentication (Cognito) на Android, но когда мы пытаемся войти в систему пользователя с действительными именем пользователя и паролем, обратный вызов onResult вызывается с signInState, равным SignInState.DONE, но когда мы пытаемся получить токен (как синхронизирующий, так и асинхронный), возникает исключение: «getTokens не поддерживает извлечение токенов при выходе из системы».

При просмотре в журнале создается впечатление, что необработанное исключение возникает и, похоже, игнорируется (из-за входа в состояние DONE):

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.federatedSignInWithoutAssigningState (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) на java.lang.Thread.run (Thread.java:818) Вызывается: com.amazonaws.services.cognitoidentity.model.NotAuthorizedException: токен не принадлежит поддерживаемому поставщику этого пула удостоверений. (Сервис: AmazonCognitoIdentity; Код состояния: 400; Код ошибки: NotAuthorizedException; Идентификатор запроса: 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.AmazonCognitoIdentityClient.invoke (AmazonCognitoIdentityClient.java:1658) в com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getId (AmazonCognitoIdentityClient.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 (приложение)

implementation "com.amazonaws:aws-android-sdk-mobile-client:2.13.4"
implementation "com.amazonaws:aws-android-sdk-auth-userpools:2.13.4"

MainApplication.kt (расширяет приложение)

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

Repository.kt

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
}

awsconfiguration.json

{
    "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"
        }
    }
}
...