У меня проблемы с авторизацией моего API на AWS для пула пользователей Cognito через HTTP-заголовки (без AWS API Gateway SDK).AWS API Gateway + Cognito User Pool Authorizer + Lambda - Какие HTTP-заголовки и разрешения необходимо установить?
Моя установка:
На AWS:
- Отдыхают API реализован на AWS Lambda (развернутых через Serverless рамках),
- экспонируется через API шлюза с помощью типа LAMBDA_PROXY (без ручного отображения)
- Авторизация на шлюзе API через предоставленный «авторизованный пул пользователей Cognito» (нет опции «AWS_IAM», без специального кодированного авторизатора)
- Тестирование API через Postman
На клиенте Ios
- Регистрация Вход с помощью AWS Cognito (SDK и UI скопированной из AWS Mobile Hub генерируемой демонстрационный Xcode проект)/
- Доступ к жесткому диску в остальном по API с помощью RestKit, не с использованием AWSAPIGateway SDK
Что работает:
Методы API должным образом развернуты без сервера.
Я могу вызвать публикацию (не настроенную на использование пула пользователей) через Postman.
Для частных методов API, я могу видеть Cognito пользователь пул Authorizer настроить в API консоли управления шлюзом, в том числе «Удостоверение маркеров источника» установлен в method.request.header.Authorization
(по умолчанию), как описано here
КСН, Я могу правильно зарегистрироваться и войти в систему как пользователь. Я могу сбросить данные Credentials AWS на консоль, показывая AccessKey
, SecretKey
и SessionKey
.
В iOS я могу запросить открытый API через RestKit.
Когда я пытаюсь вызвать частный метод API через Postman, я возвращаю ошибку HTTP 401 с телом {"message": "Unauthorized"}
. (. Что ожидается, без установки каких-либо разрешений)
Что не удается:
Чтобы проверить авторизацию в Почтальон, я попытался
- копировать/вставить в AWSCredentials'
SessionKey
я получил от клиента IOS, как HTTP-заголовкаAuthorization
- как определено here (last paragraph - "API Gateway’s Authorizer for Cognito User Pools") - и как
X-Amz-Security-Token
заголовок
В результате всегда была ошибка 401.
Что мне нужно установить в качестве заголовков HTTP, чтобы разрешить вызовы в частный API? "Authorization" должен работать - возможно, мне не хватает прав на роль?
Как лучше отладить поток разрешений/авторизации?
Вы упоминаете использование 'SessionKey'; заключается в том, что в отношении одного из идентификаторов идентификатора или «токена доступа»? в других терминах, насколько мне известно, это должен быть «токен веб-ключа JSON». по http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html –
Спасибо, Питер, вы, кажется, правы, там используются два типа токенов, и для меня было непонятно, какой из них использовать. Если ожидается JWT, я не нашел никакой информации о том, как его получить (в Android SDK есть метод http://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon- cognito-user-identity-pools-android-sdk.html, но не в SDK iOS http://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools- ios-sdk.html) – thomers
Я понимаю, что вы подписываете своего пользователя с помощью метода, подобного 'getSession (имя пользователя, пароль: пароль, validationData: nil, scopes: nil)', который должен возвращать объект 'session' типа' AWSCognitoIdentityUserSession'; токен доступен как 'session.accessToken? .tokenString' –