Авторизация и аутентификация

Авторизация и аутентификация — это два разных, но тесно связанных процесса, которые обеспечивают безопасность и доступность данных и ресурсов в системе.
Основные понятия
Идентификация
Идентификация — это процесс установления личности пользователя, то есть получение его идентификатора, такого как логин, email, номер телефона и т.д. Идентификация является первым шагом аутентификации, так как без нее система не знает, с кем имеет дело.
Аутентификация
Аутентификация — это проверка подлинности личности пользователя, то есть подтверждение того, что он является тем, кем себя представляет.
Авторизация
Авторизация — это определение прав пользователя на доступ к определенным данным и ресурсам в системе, то есть установление того, что он может делать после аутентификации.
Пример: когда Вася хочет войти в конфлюэнс и вводит свою почту, система понимает, что аккаунт с таким email существует. Это идентификация. Затем система отправляет на Васин номер СМС с одноразовым паролем, а Вася вводит пароль и тем самым доказывает, что это именно он. Это аутентификация. Система понимает, что Вася настоящий и перенаправляет его на главную страницу – это авторизация, ведь Вася авторизован (то есть имеет право) на чтение главной страницы, как и любой другой сотрудник.
Способы аутентификации
OAuth 2.0
OAuth 2.0 — это протокол авторизации, предназначенный для организации доступа клиента к ресурсам или данным на другом сервисе. После выполнения процедуры входа клиент получает от сервера access_token, который позволяет клиентскому приложению получать доступ к ресурсу для выполнения определенных действий от имени пользователя и refresh_token – необходимый для обновления access_token. refresh_token обычно имеет длительный срок действия (исчисляется в месяцах) и обменивается на новый по истечению срока действия.
JWT (JSON Web Token)
JWT (JSON Web Token) – это открытый стандарт для создания и передачи данных в формате JSON, которые могут быть подписаны и/или зашифрованы. Поскольку информация конфиденциальна, такой токен хранится обычно несколько минут.
JWT состоит из трёх частей: заголовка, полезной нагрузки, подписи. Получив JWT от пользователя, приложение сравнивает секретный ключ с тем значением, которое было передано в токене. Если эти значения не совпадут, значит доверять ему приложение не будет.
API-ключи
API-ключи – это ключи шифрования для аутентификации пользователя в системе, по аналогии логина и пароля. Ключ обычно передается в заголовке или параметре запроса.
Существует два вида ключей API:
- Публичный ключ (открытый). Используется для шифрования данных при обращении приложения к серверу.
- Секретный ключ (закрытый). Известен только пользователю и владельцу сайта. Используется для расшифровки данных, отправленных приложением.
mTLS (mutual TLS)
mTLS (mutual TLS) — это расширение протокола TLS, которое позволяет обеим сторонам взаимодействия (клиенту и серверу) аутентифицировать друг друга с помощью цифровых сертификатов. Это повышает уровень безопасности и доверия между сторонами, так как исключает возможность подмены или перехвата данных. mTLS часто используется для аутентификации между микросервисами или API.
Есть две пары сертификатов и два закрытых ключа:
- Первый закрытый ключ находится на сервере и позволяет расшифровывать данные, которые шифруются открытым ключом, как при обычной работе TLS.
- Второй закрытый ключ устанавливается на клиенте, а сервер при ответах клиенту также шифрует данные его открытым ключом. Таким образом, к серверу могут обращаться только те клиенты, у которых есть закрытый ключ для расшифровки данных.
Подборка материалов про аутентификацию и авторизацию
Ссылки на официальные сайты
Про аутентификацию и авторизацию
- Брайан Кукси. Про аутентификацию и 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
- Плейлист — OpenAPI и Swagger за 1 час
- Что такое OAuth 2.0 и OpenID Connect за 15 минут
- Аутентификация в Веб-Приложениях 👨💻JWT и Сессии
- Аутентификация и авторизация в проекте с микросервисной архитектурой: стратегии, практический пример
- Как работает OAuth 2.0 (понятным языком)
- OpenID Connect. Теория
- OAuth2 и OpenID Connect простым языком
- Александр Семёнов "Аутентификация OAuth / OpenID Connect в Enterprise
- Разбираем OAuth2 и OpenID Connect на пальцах
Интересное
Стандарт ЦБ РФ по авторизации и аутентификации — словарик, примеры диаграмм, json-объектов, процессов