Перейти к основному содержимому

OAuth 2.0 и OpenID Connect

OAuth 2.0

OAuth 2.0 — протокол авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователей, без необходимости передавать логин и пароль. Вместо этого используются токены доступа.

OpenID Connect

OpenID Connect — протокол аутентификации, который позволяет безопасно узнать сведения о пользователе, от имени которого совершается вход. OpenID Connect позволяет реализовывать сценарии, когда единственный логин можно использовать во множестве приложений (single sign-on, SSO).

В чём отличие между OAuth 2.0 и OpenID Connect

Основное различие заключается в процессах аутентификации и авторизации.

  • Аутентификация — проверка, кто именно запрашивает доступ и является ли он тем, кем он себя представляет.
  • Авторизация — проверка, имеет ли конкретный клиент доступ к запрашиваемой информации.

OAuth 2.0 используется для авторизации, а OpenID Connect для аутентификации. OpenID Connect также делает возможным использование SSO.

Токены

Оба протокола используют токены. Токен — это строка, которая содержит зашифрованную или подписанную информацию.

  • id_token — содержит информацию о клиенте, выдается провайдером идентификации (IdP) в ответ на успешную аутентификацию пользователя. Может содержать, например, id пользователя, фамилию, имя, телефон и т.д.
  • access_token — токен доступа, который используется для совершения действий от имени пользователя. Может быть ограничен scope — перечислением прав, которые может делать приложение с этим токеном от имени клиента. access_token имеет короткий срок жизни в целях безопасности.
  • refresh_token — используется для получения нового access_token, когда старый истекает или отзывается. Имеет более длительный срок.

Все эти токены можно генерировать по-разному, но самый популярный формат — это JSON Web Token (JWT).

Структура JWT

  • Заголовок (header) — состоит из типа токена и алгоритма хэширования подписи.
  • Полезная нагрузка (payload) — любые данные, которые вы хотите передать в токене. Payload не шифруется при использовании токена, поэтому не стоит передавать в нем чувствительные данные.
  • Подпись (signature) — заголовок и нагрузка формируются отдельно в формате JSON, кодируются в base64, а затем на их основе вычисляется подпись, которая также становится частью токена.

Процесс на примере использования VK API

  1. Приложение генерирует параметры запроса и отправляет пользователя на сервер авторизации oauth.vk.com, добавив к ссылке параметры, включая запрашиваемый scope, например, friends.
  2. Пользователю открывается окно, где он проходит аутентификацию — вводит логин и пароль.
  3. После входа открывается окно с запросом прав доступа. Пользователь нажимает на кнопку "Разрешить", тем самым авторизуя приложение на выполнение действий от его имени с запрашиваемым scope.
  4. Сервер авторизации генерирует access_token и refresh_token и возвращает их приложению.
  5. Теперь приложение может управлять списком друзей пользователя.

Подборка материалов про аутентификацию и авторизацию

Ссылки на официальные сайты

  1. RFC 7519 — JSON Web Token (JWT)
  2. OAuth 2.0
  3. OpenID Connect

Про аутентификацию и авторизацию

  1. Брайан Кукси. Про аутентификацию и OAuth 2.0
  2. Аутентификация в веб-API: пример и ликбез по Postman — Анна Вичугова
  3. Обзор способов аутентификации
  4. Keycloak: зачем нужен, кому подходит и какие преимущества даёт
  5. Требования аутентификации и авторизации API — из открытого курса по документированию API
  6. Обзор подходов к реализации аутентификации и авторизации в микросервисных системах
  7. Все еще работаете с access token на клиенте? Тогда мы идем к вам

Про OAuth

  1. OAuth 2.0 простым и понятным языком
  2. Как работает OAuth 2.0 и OpenID Connect
  3. Тонкости авторизации: обзор технологии OAuth 2.0
  4. Иллюстрированное руководство по OAuth и OpenID Connect
  5. OAuth в мобильных приложениях
  6. Эволюция облачной системы авторизации
  7. Как устроена аутентификация в Steam

Про OpenID Connect

  1. OpenID Connect простыми словами
  2. Вкратце об OpenID Connect
  3. Как получить токен в OpenID Connect

Про JWT

  1. Пять простых шагов для понимания JSON Web Tokens (JWT)
  2. Что такое JWT, какие есть преимущества и недостатки аутентификации с помощью JWT
  3. JWT-авторизация на сервере — с примерами на Go

Статьи практика

  1. Тернистый путь внедрения аутентификации через соцсети — МТС
  2. Почему работать с OAuth сложно даже сегодня?
  3. Аутентификация и авторизация в проекте с микросервисной архитектурой: стратегии, практический пример
  4. Когда контекст доступа важен: авторизация в микросервисной платформе на GraphQL
  5. Как мы делаем JWT-аутентификацию — Doubletapp
  6. Особенности самообслуживаемой аутентификации Apache Kafka на примере Booking.com
  7. Опыт 2Gis
  8. UX/UI при авторизации: 130 примеров

Видео

  1. Авторизация и аутентификация в микросервисной архитектуре
  2. Аутентификация OAuth2 и токены JWT
  3. Плейлист про JWT
  4. Что такое OAuth 2.0 и OpenID Connect за 15 минут
  5. Аутентификация в Веб-Приложениях: JWT и Сессии
  6. [Аутентификация и авторизация в проекте с микросервисной

архитектурой: стратегии, практический пример](https://www.youtube.com/watch?v=8ExcbFRZa6g) 7. Как работает OAuth 2.0 (понятным языком) 8. OpenID Connect. Теория 9. OAuth2 и OpenID Connect простым языком 10. Александр Семёнов "Аутентификация OAuth / OpenID Connect в Enterprise" 11. Разбираем OAuth2 и OpenID Connect на пальцах

Интересное

Стандарт ЦБ РФ по авторизации и аутентификации — словарик, примеры диаграмм, json-объектов, процессов