Как исправить «Неверный токен логина». при попытке использовать аутентифицированного пользователя с AWS и Cognito User Pool - PullRequest
0 голосов
/ 02 января 2019

Я установил приложение на платформе Xamarin, которое обрабатывает вход пользователя через AWS Cognito User Pools, что работает. Однако, когда я пытаюсь получить доступ к дополнительным сервисам AWS, я получаю «Неверный токен входа». ошибка.

В консоли AWS я настроил пул пользователей с клиентом приложения, а также пул удостоверений, который использует Cognito в качестве поставщика аутентификации:

Изменить пул удостоверений> Развернуть вкладку «Поставщик аутентификации»> вкладка «Cognito»> Добавил мой идентификатор пула пользователей и идентификатор клиента приложения в обязательные поля.

Мой код для обработки логина выглядит следующим образом:

private AmazonCognitoIdentityProviderClient provider;
    public AmazonCognitoIdentityProviderClient Provider
    {
        get
        {
            if(provider == null)
            {
                provider = new AmazonCognitoIdentityProviderClient(cognitoAWSCredentials, Constants.REGION_ENDPOINT);
            }

            return provider;
        }
    }

    private CognitoUserPool userPool;
    public CognitoUserPool UserPool
    {
        get
        {
            if(userPool == null)
            {
                userPool = new CognitoUserPool(Constants.AWS_COGNITO_USER_POOL_ID, Constants.AWS_COGNITO_APP_CLIENT_ID, Provider);
            }

            return userPool;
        }
    }

    private CognitoAWSCredentials cognitoAWSCredentials;
    public CognitoAWSCredentials CognitoAWSCredentials
    {
        get
        {
            if (cognitoAWSCredentials == null)
            {
                cognitoAWSCredentials = new CognitoAWSCredentials(Constants.AWS_COGNITO_USER_IDENTITY_POOL_ID, Constants.REGION_ENDPOINT);
            }
            return cognitoAWSCredentials;
        }
    }

    private async void GetAWSCredentials()
    {
        string accesstoken = string.Empty;

        // Try to find user;
        CognitoUser user = new CognitoUser(usernameField.Text, Constants.AWS_COGNITO_APP_CLIENT_ID, UserPool, Provider);
        InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest()
        {
            Password = passwordField.Text
        };

        try
        {
            AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest);
        }
        catch(Exception ex)
        {
            string message = ex.Message;

            if(message == "User does not exist.")
            {
                await DisplayAlert("Error", message, "Ok");
            }
            else if(message == "Incorrect username or password.")
            {
                await DisplayAlert("Error", "Incorrect password.", "Ok");
            }
            else
            {
                await DisplayAlert("Error", "Oops! Something went wrong. Please try again.", "Ok");
            }

            loginButton.IsEnabled = true;

            return;
        }

        CognitoAWSCredentials.AddLogin("www.amazon.com", user.SessionTokens.IdToken);
    }

Когда я пытаюсь использовать какой-либо другой сервис AWS (в данном случае DynamoDB), используя приведенный выше код, я получаю следующее сообщение об ошибке:

"ОШИБКА | NotAuthorizedException отправляет запрос GetIdRequest на https://cognito -identity.ap-southeast-2.amazonaws.com / . Попытка 1. -> Amazon.CognitoIdentity.Model.NotAuthorizedException: неверный вход лексема ".

Как правильно аутентифицировать пользователя с помощью AWS Cognito for Xamarin?

Любая помощь будет высоко ценится. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...