🛂 Аутентификация
Аутентификация - это процес определения личности пользователя.
Используется для идентификации пользователя; Определить, что пользователь тот, за кого себя выдает.
Для этого выполняется проверка аутентификационных данных, которыми могут выступать логин и пароль, файловый сертификат, API ключ и другие.
1. Ты регистрируешься в Instagram: указываешь email и пароль. - Это процесс создания аккаунта в системе
2. При входе в приложение ты указываешь свои email и пароль. Instagram сопоставляет данные с данными аккаунта в системе и удостоверяется, что ты - это ты. - Это процесс аутентификации
Ответом на аутентификацию пользователь получает аутентификационный контекст, который используется для передачи информации о том, что пользователь прошел аутентификацию. Распространенные механизмы для передачи контекста: JWT-токен и Cookie.
1. Ты пришел в аквапарк и показал билет. - Аутентификация
2. Тебе выдали браслет. - Механизм для передачи данных аутентификации
3. У каждой горки ты показываешь браслет вместо того, чтобы каждый раз доставать билет. - Передача аутентификационных данных
❓ Аутентификация отвечает на вопрос: "Действительно ли это твой аккаунт?"
🔓 Авторизация
Авторизация - это процесс проверки разрешений на выполнение действий в системе.
Она служит для того, чтобы ограничивать доступ пользователей к функциональности.
В бэкенд приложении функциональностью могут быть отдельные HTTP-методы или их группировки. Это пример простой авторизации, когда для принятия решения используется набор единых для всех правил.
Правила авторизации могут быть сложнее и основываться на данных из контекста системы.
1. Ты можешь посмотреть свою ленту, если ты аутентифицирован. При этом ты не можешь смотреть ленты других людей. Работает правило "Только аутентифицированный пользователь может получить доступ к своей сущности". В данном случае в роли сущности выступает лента. Для принятия авторизационного решения не нужны данные из контекста: вся необходимая информация содержится в учетных данных аутентификации. - Это простая авторизация
2. Ты можешь посмотреть истории для близких друзей только тех, кто добавил тебя в список. Для принятия авторизационного решения "Может ли пользователь А посмотреть историю для близких друзей пользователя Б" нужны данные о списке близкиъ друзей пользователя Б; Аутентификационных данных недостаточно. Нужно извлечь из хранилища информацию необходимую для принятия решения. - Это контекстная авторизация
❓ Авторизация отвечает на вопрос: "Какие действия аутентифицированный пользователь может выполнять в системе?"
➡️ Авторизация всегда следует за аутентификацией.