Авторизатор AWS Cognito не работает с AWS SDK для Android
В моем проекте Android я использую AWS SDK для регистрации пользователей благодаря Cognito и API вызовов в API Gateway. В моем пуле пользователей Cognito я создал группу пулов пользователей. Цель этой группы - разрешить только пользователям в этой группе вызывать определенный API.
Чтобы заставить это работать, я стараюсь следовать этому уроку (особенно видео). Поэтому я создал авторизатор Cognito, добавил его в запрос метода в API Gateway и попытался вызвать API из моего приложения с помощью AWS SDK:
@Service(endpoint = "https://abcdefghig.execute-api.eu-central-1.amazonaws.com/staging")
public interface AwsdemoapiClient
{
@Operation(path = "/test-api", method = "GET")
Empty testApiGet();
}
Проблема в том, аутентифицирован ли пользователь или нет, а в группе или нет, я всегда получаю следующую ошибку, когда звоню testApiGet()
в моем приложении: 401 Unauthorized
даже если у меня есть необходимые полномочия в моих ролях IAM. После некоторого исследования кажется, что токен id отсутствует, что может быть причиной того, что я получаю эту ошибку.
Но не должен ли он автоматически управляться AWS SDK для Android? Как я могу это исправить?
Спасибо за вашу помощь.
1 ответ
Отправка идентификатора токена в заголовке фактически решила проблему:
@Service(endpoint = "https://abcdefghig.execute-api.eu-central-1.amazonaws.com/staging")
public interface AwsdemoapiClient
{
@Operation(path = "/test-api", method = "GET")
Empty testApiGet(@Parameter(name = "Authorization", location = "header") String idToken);;
}
Вы можете получить идентификатор токена, вызвав следующую функцию:
CognitoUserPool pool = new CognitoUserPool(context, userPoolId, clientId, clientSecret, region);
pool.getCurrentUser().getSessionInBackground(...);