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
- Приложение генерирует параметры запроса и отправляет пользователя на сервер авторизации oauth.vk.com, добавив к ссылке параметры, включая запрашиваемый scope, например, friends.
- Пользователю открывается окно, где он проходит аутентификацию — вводит логин и пароль.
- После входа открывается окно с запросом прав доступа. Пользователь нажимает на кнопку "Разрешить", тем самым авторизуя приложение на выполнение действий от его имени с запрашиваемым scope.
- Сервер авторизации генерирует access_token и refresh_token и возвращает их приложению.
- Теперь приложение может управлять списком друзей пользователя.
Подборка материалов про аутентификацию и авторизацию
Ссылки на официальные сайты
Про аутентификацию и авторизацию
- Брайан Кукси. Про аутентификацию и OAuth 2.0
- Аутентификация в веб-API: пример и ликбез по Postman — Анна Вичугова
- Обзор способов аутентификации
- Keycloak: зачем нужен, кому подходит и какие преимущества даёт
- Требования аутентификации и авторизации API — из открытого курса по документированию API
- Обзор подходов к реализации аутентификации и авторизации в микросервисных системах
- Все еще работаете с access token на клиенте? Тогда мы идем к вам
Про OAuth
- OAuth 2.0 простым и понятным языком
- Как работает OAuth 2.0 и OpenID Connect
- Тонкости авторизации: обзор технологии OAuth 2.0
- Иллюстрированное руководство по OAuth и OpenID Connect
- OAuth в мобильных приложениях
- Эволюция облачной системы авторизации
- Как устроена аутентификация в Steam
Про OpenID Connect
Про JWT
- Пять простых шагов для понимания JSON Web Tokens (JWT)
- Что такое JWT, какие есть преимущества и недостатки аутентификации с помощью JWT
- JWT-авторизация на сервере — с примерами на Go
Статьи практика
- Тернистый путь внедрения аутентификации через соцсети — МТС
- Почему работать с OAuth сложно даже сегодня?
- Аутентификация и авторизация в проекте с микросервисной архитектурой: стратегии, практический пример
- Когда контекст доступа важен: авторизация в микросервисной платформе на GraphQL
- Как мы делаем JWT-аутентификацию — Doubletapp
- Особенности самообслуживаемой аутентификации Apache Kafka на примере Booking.com
- Опыт 2Gis
- UX/UI при авторизации: 130 примеров
Видео
- Авторизация и аутентификация в микросервисной архитектуре
- Аутентификация OAuth2 и токены JWT
- Плейлист про JWT
- Что такое OAuth 2.0 и OpenID Connect за 15 минут
- Аутентификация в Веб-Приложениях: JWT и Сессии
- [Аутентификация и авторизация в проекте с микросервисной
архитектурой: стратегии, практический пример](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-объектов, процессов