Как мобильное приложение и веб-сервер взаимодействуют, если между ними добавлено AWS Cognito - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время мое мобильное приложение выполняет единый вход, выполнив следующие действия:

  1. Пользователь выберет одного из IDP из списка в мобильном приложении и нажмет кнопку «Вход».
  2. Мобильное приложение вызовет управление браузером приложения и переход к URL-адресу единого входа
  3. Если IDP еще не прошел проверку подлинности, он запрашивает у пользователя аутентификацию
  4. Пользователю будет предоставлена ​​форма для входа в систему для ввода его / ее учетных данных.
  5. После успешной аутентификации пользователя с помощью IDP утверждение SAML будет передано Web Server
  6. Web Server доверяет IDP, принимает токен SML и генерирует токен сеанса
  7. Компонент мобильного браузера принимает токен сеанса и поделиться им с собственным мобильным приложением
  8. вызовы мобильного приложения web server API с этим токеном сеанса

Теперь из-за соображений безопасности токен сеанса не рекомендуется хранить на мобильном устройстве, тогда как OID C или токены JWT могут храниться

Поскольку мое веб-приложение не поддерживает генерацию OID C токенов, поэтому я думал добавить еще один слой AWS Cognito между моим мобильным устройством и IDP. Теперь процесс проверки подлинности будет выглядеть следующим образом: ( поток проверки подлинности IdP пула пользователей SAML )

  1. . Мобильное приложение запускает процесс входа, направляя пользователя в пользовательский интерфейс, размещенный на * 1051. *.
  2. Пользователь перенаправлен на провайдера идентификации.
  3. IdP аутентифицирует пользователя при необходимости. Если IdP распознает, что у пользователя есть активный сеанс, IdP пропускает проверку подлинности для обеспечения единого входа (SSO).
  4. IdP ОТПРАВЛЯЕТ утверждение SAML службе Amazon Cognito.
  5. После проверки утверждения SAML и сбора пользовательских атрибутов (утверждений) из подтверждения Amazon Cognito возвращает токены OID C в мобильное приложение для уже вошедшего в систему пользователя.

Now у меня вопрос, как только у меня OID C токен, как мобильное приложение будет вызывать мой web server для любых вызовов API? Это через Cognito? Прямой вызов на мой веб-сервер не будет работать, так как он не распознает токен OID C, возвращенный Cognito? Как мне добиться этого взаимодействия от мобильного приложения до моего веб-сервера?

ОБНОВЛЕНИЕ: я смог проверить токен JWT с моего веб-сервера, выпущенного Cognito. Если кто-то хочет сделать то же самое, он может обратиться к этой библиотеке cognitojwt (не написанной мной, но нашел ее в inte rnet)

1 Ответ

1 голос
/ 07 апреля 2020

OID C токены, возвращаемые Cognito, представляют собой ID Token и Access Token, оба являются JWT. Вы можете передать их в свой пользовательский бэкэнд напрямую (чаще всего в заголовке Authorization).

В бэкэнде вы должны декодировать и проверить токен, используя ключ publi c (JWK) вашего пула пользователей. JWK доступен на https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json. Если токен действителен и срок его действия не истек, вы можете доверять ему и использовать его для пользовательских логинов авторизации бэкэнда c.

Весь процесс проверки токенов описан здесь https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html и там Есть несколько библиотек с открытым исходным кодом, которые помогут вам сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...