Пулы пользователей, пулы удостоверений и JWT

Использование AWS Security для разработчиков

Rahul Singh

Technical Product Manager

Cognito — это два сервиса под одним именем

Amazon Cognito

  • Управляемая идентификация для пользователей вашего приложения
  • Одно имя — два разных сервиса

Два вопроса расположены над пунктирной границей с подписью Amazon Cognito. Внутри границы — две синие панели рядом: пул пользователей, описанный как каталог пользователей, и пул удостоверений, описанный как брокер учётных данных. Линии от обеих панелей сходятся к пунктирному оранжевому блоку внизу, где отмечено, что многие приложения используют оба сервиса.

Использование AWS Security для разработчиков

Cognito — это два сервиса под одним именем

Amazon Cognito

  • Управляемая идентификация для пользователей вашего приложения
  • Одно имя — два разных сервиса

Какой сервис вам нужен?

  • Вход и профили пользователей: пул пользователей
  • Браузер или мобильное приложение обращается к AWS напрямую: пул удостоверений

Два вопроса расположены над пунктирной границей с подписью Amazon Cognito. Внутри границы — две синие панели рядом: пул пользователей, описанный как каталог пользователей, и пул удостоверений, описанный как брокер учётных данных. Линии от обеих панелей сходятся к пунктирному оранжевому блоку внизу, где отмечено, что многие приложения используют оба сервиса.

Использование AWS Security для разработчиков

Пул пользователей выполняет вход

Управляемый каталог пользователей

  • Регистрация и вход
  • Сброс пароля
  • Многофакторная аутентификация

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

Использование AWS Security для разработчиков

Пул пользователей выполняет вход

Управляемый каталог пользователей

  • Регистрация и вход
  • Сброс пароля
  • Многофакторная аутентификация

 

При успешном входе — три токена

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

Использование AWS Security для разработчиков

Пул пользователей выполняет вход

Управляемый каталог пользователей

  • Регистрация и вход
  • Сброс пароля
  • Многофакторная аутентификация

 

При успешном входе — три токена

  • ID-токен: кто пользователь
  • Токен доступа: что ему разрешено вызывать
  • Токен обновления: получение новых токенов позже

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

Использование AWS Security для разработчиков

Пул удостоверений выдаёт учётные данные AWS

Токены — это не учётные данные

  • Подтверждение личности для вашего приложения
  • Не учётные данные для доступа к сервисам AWS

 

Пулы удостоверений: доверенный токен на входе, учётные данные на выходе

Вертикальная схема с той же структурой, что и диаграмма пула пользователей: доверенный токен передаётся в пул удостоверений, который проверяет, кем он выдан, и возвращает учётные данные AWS, ограниченные одной ролью и имеющие срок действия

Использование AWS Security для разработчиков

Пул удостоверений выдаёт учётные данные AWS

Токены — это не учётные данные

  • Подтверждение личности для вашего приложения
  • Не учётные данные для доступа к сервисам AWS

 

Пулы удостоверений: доверенный токен на входе, учётные данные на выходе

  • Сборочное задание обменяло OIDC-токен
  • Доказательство, которое у вас есть, обменивается на пропуск

Вертикальная схема с той же структурой, что и диаграмма пула пользователей: доверенный токен передаётся в пул удостоверений, который проверяет, кем он выдан, и возвращает учётные данные AWS, ограниченные одной ролью и имеющие срок действия

Использование AWS Security для разработчиков

Одно приложение, обе части

Браузер использует оба сервиса

  1. Войти и получить токен
  2. Отправить этот токен в ваш API

Bearer-токен: кто им владеет, тот им пользуется

Вертикальная схема. Браузер входит через пул пользователей, который возвращает токен. Далее этот единственный токен разделяется на два пути: налево — к вашему API, направо — к пулу удостоверений. Пул удостоверений возвращает учётные данные, и именно они попадают в S3.

Использование AWS Security для разработчиков

Одно приложение, обе части

Браузер использует оба сервиса

  1. Войти и получить токен
  2. Отправить этот токен в ваш API
  3. Обменять тот же токен на учётные данные

Вертикальная схема. Браузер входит через пул пользователей, который возвращает токен. Далее этот единственный токен разделяется на два пути: налево — к вашему API, направо — к пулу удостоверений. Пул удостоверений возвращает учётные данные, и именно они попадают в S3.

Использование AWS Security для разработчиков

Одно приложение, обе части

Браузер использует оба сервиса

  1. Войти и получить токен
  2. Отправить этот токен в ваш API
  3. Обменять тот же токен на учётные данные
  4. Обратиться к S3 с помощью этих учётных данных

Токены — вашему коду, учётные данные — AWS

Вертикальная схема. Браузер входит через пул пользователей, который возвращает токен. Далее этот единственный токен разделяется на два пути: налево — к вашему API, направо — к пулу удостоверений. Пул удостоверений возвращает учётные данные, и именно они попадают в S3.

Использование AWS Security для разработчиков

Токен — это текст с подписью

Три сегмента, соединённые точками, с подписями «Заголовок», «Полезная нагрузка» и «Подпись». Открытый замок расположен на полезной нагрузке, а скобка под первыми двумя сегментами показывает, до какого места распространяется подпись.

JWT: JSON Web Token

  • Утверждения: именованные данные о пользователе
Использование AWS Security для разработчиков

Токен — это текст с подписью

Три сегмента, соединённые точками, с подписями «Заголовок», «Полезная нагрузка» и «Подпись». Открытый замок расположен на полезной нагрузке, а скобка под первыми двумя сегментами показывает, до какого места распространяется подпись.

JWT: JSON Web Token

  • Утверждения: именованные данные о пользователе
  • Кодируется, но не шифруется
  • Прочитать и изменить его может кто угодно
Использование AWS Security для разработчиков

Сначала проверьте, потом читайте

Сначала — проверка

  • JWKS: JSON Web Key Set, публичные ключи подписи издателя
  • Подпись сверяется с этими ключами

Вертикальная схема в виде шлюза. Токен поступает и последовательно проходит четыре проверки: подпись, издатель, получатель и срок действия. Публичные ключи издателя подаются сбоку в проверку подписи, и только после четвёртой проверки путь ведёт к зелёному блоку с чтением утверждений.

Использование AWS Security для разработчиков

Сначала проверьте, потом читайте

Сначала — проверка

  • JWKS: JSON Web Key Set, публичные ключи подписи издателя
  • Подпись сверяется с этими ключами

 

Затем — три утверждения

  • iss: ваш пул пользователей
  • aud в ID-токене, client_id в токене доступа
  • exp: токен ещё действителен

Вертикальная схема в виде шлюза. Токен поступает и последовательно проходит четыре проверки: подпись, издатель, получатель и срок действия. Публичные ключи издателя подаются сбоку в проверку подписи, и только после четвёртой проверки путь ведёт к зелёному блоку с чтением утверждений.

Использование AWS Security для разработчиков

Проверенный токен может оказаться не тем

Две парные карточки рядом. Карточка ID-токена помечена как токен удостоверения, показывает ID клиента, хранящийся в утверждении audience, и отмечает, что у неё нет scope, — над серым блоком «кто пользователь». Карточка токена доступа помечена как токен доступа, показывает ID клиента в собственном утверждении client identifier, и отмечает, что у неё есть scope, — над оранжевым блоком «что ему разрешено вызывать». Пунктирная полоса под обеими карточками отмечает, что утверждение Cognito groups присутствует в обоих токенах.

Проверен, но всё равно не тот токен

Использование AWS Security для разработчиков

Проверенный токен может оказаться не тем

Две парные карточки рядом. Карточка ID-токена помечена как токен удостоверения, показывает ID клиента, хранящийся в утверждении audience, и отмечает, что у неё нет scope, — над серым блоком «кто пользователь». Карточка токена доступа помечена как токен доступа, показывает ID клиента в собственном утверждении client identifier, и отмечает, что у неё есть scope, — над оранжевым блоком «что ему разрешено вызывать». Пунктирная полоса под обеими карточками отмечает, что утверждение Cognito groups присутствует в обоих токенах.

Проверен, но всё равно не тот токен

token_use определяет тип токена

  • cognito:groups присутствует в обоих типах и не является scope

  • scope: что токену разрешено вызывать

  • sub: какой пользователь, значение не меняется
  • Идентификация — это не права доступа
Использование AWS Security для разработчиков

Давайте потренируемся!

Использование AWS Security для разработчиков

Preparing Video For Download...