AWS Api Gateway и Cognito на Android — ошибка 401

У меня проблемы с интеграцией Cognito с ApiGateway. Сначала я SignIn с Cognito, там нет проблем, я получаю все токены. Затем я должен сделать вызов API Gateway. Я использую автоматически созданный SDK для Android. Я следую примеру здесь: http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-generate-sdk-android.html, но я всегда получаю одну и ту же ошибку.

CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                    context,
                    CognitoConstants.IDENTITY_POOL_ID,
                    CognitoConstants.REGION);

String token = cognitoUserSession.getIdToken().getJWTToken();

Map<String, String> logins = new HashMap<>();
            logins.put(CognitoConstants.LOGIN_MAP_KEY, token);
            credentialsProvider.setLogins(logins);

ApiClientFactory factory = new ApiClientFactory()
                    .credentialsProvider(credentialsProvider);

client = factory.build(ExampleAPIClient.class);
client.exampleApi1AccountsGet();

Результат:

ApiClientException com.amazonaws.mobileconnectors.apigateway.ApiClientException: {"message":"Unauthorized"}
(Service: BancarAPIClient; Status Code: 401; Error Code: null; Request ID: 3679cd4b-eefc-11e6-9d00-f99040a8ed67)

person Rodrigo Ezequiel Arias Roberts    schedule 09.02.2017    source источник


Ответы (1)


Код Android, который у вас есть, получает учетные данные из пула удостоверений Cognito, который отличается от пула пользователей Cognito.

Я не уверен, какой из них вы хотите использовать, но если код Android правильный, и вы хотите выполнить вход через Twitter/FB/и т. д. (который является Identity Pool), вы захотите установить AuthorizationType в методах шлюза API на AWS_IAM. Похоже, что API, вероятно, настроен с авторизатором Cognito, который предназначен для функции пулов пользователей.

person jackko    schedule 14.02.2017
comment
Спасибо. Вы правы, я устанавливал учетные данные для Cognito Identity Pool. Собственно, мне просто нужно было установить вереск с токеном UserPool, но я не мог узнать как, так как сгенерированный SDK не очень гибкий. Выяснилось, что была проблема со стороны бэкенда, с промахом конфигурации. После исправления сгенерированный SDK добавил этот параметр в метод (@Parameter( name = Authorization, location = header) и вуаля! - person Rodrigo Ezequiel Arias Roberts; 14.02.2017