Я установил приложение на платформе 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?
Любая помощь будет высоко ценится.
Спасибо.