Авторизатор 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(...);
Другие вопросы по тегам