Аутентификация — одна из ключевых функций в любом реальном проекте. Во время учебы в университете у меня ушли месяцы, чтобы найти оптимальный способ создания полнотекстовой системы аутентификации и авторизации с использованием стека MERN.
Проблема заключалась в том, что есть различные способы реализации аутентификации с использованием современных технологий. Существуют системы, основанные на файлах cookie, системы, основанные на токенах, и когда дело доходит до выбора пакетов, они тоже отличаются между собой — как passport.js или доступные для использования библиотеки на базе Microsoft. Кроме того, есть и сторонние решения, такие как OAuth.
Итак, как же выбрать наиболее подходящий подход? Для этого необходимо базовое представление о процессе аутентификации при выборе правильного технологического подхода. Эта статья представляет обобщенное объяснение того, как работают системы аутентификации.
Прежде, чем мы начнем
Некоторые из вас, возможно, сталкивались с понятиями “аутентификация” и “авторизация”. Прежде чем мы продолжим, лучше понять разницу между этими двумя словами. Аутентификация и авторизация — это два разных блока системы входа в систему.
Аутентификация — это проверка имени пользователя, пароля и разрешение пользователю войти в систему, если имя пользователя и пароль совпадают. Авторизация — это проверка того, имеет ли вошедший в систему пользователь надлежащее разрешение на выполнение различных действий. Возможно, вошедший в систему пользователь должен только просматривать элементы, но не удалять их. Другой пользователь может иметь разрешение как на просмотр, так и на удаление. Такого рода разрешения для каждой роли проверяются с помощью авторизации.
Основы аутентификации
Аутентификация может основываться либо на cookies, либо на токенах. Сначала рассмотрим, какие есть основные шаги в процессе аутентификации.
На приведенной выше диаграмме клиент — это приложение (веб-браузер), которое мы используем для доступа к ресурсам (интернет). Приведенная выше диаграмма иллюстрирует сценарий входа пользователя на сайт с авторизацией. Такой сайт предоставляет контент, доступный только зарегистрированным пользователям.
- Пользователь вводит логин и пароль на странице входа в систему.
- Сервер проверяет введенные учетные данные.
- Если учетные данные действительны, вход на сервер выполнен успешно и создается фрагмент данных для идентификации вошедшего в систему пользователя.
- Этот фрагмент данных уходит на сторону клиента.
- Клиент сохраняет данный фрагмент и использует его каждый раз, когда отправляет запрос на сервер с запросом содержимого членства.
- При запросе данных о членстве с сервера клиент присоединяет фрагмент данных к запросу.
- Сервер проверяет вложенные данные перед отправкой ресурсов.
- Если проверка прошла успешно, сервер отправляет запрошенные данные.
Диаграмма ниже показывает, как работает аутентификация, когда введены неверные данные:
Есть разные подходы к созданию такого фрагмента проверочной информации и его повторному использованию. Для выполнения этих сценариев в основном используются подходы, основанные на токенах или файлах cookie. У каждого подхода есть свои плюсы и минусы.
Подход на основе файлов cookie
Как уже сказано выше, существуют различные подходы к созданию фрагмента данных, который указывает, что пользователь — именно тот, кто нужен. Посмотрим, как для этих целей используются файлы cookie.
В системе аутентификации на основе файлов cookie после ввода действительных учетных данных сервер создает идентификатор активной сессии и сохраняет его в базе данных. Кроме того, к браузеру прикрепляется файл cookie с соответствующим идентификатором сессии, который соответствует данной активной сессии в базе данных.
Идентификатор активной сессии, хранящийся в базе данных, и идентификатор сессии в браузере совпадают друг с другом.
Веб-браузеры автоматически сохраняют файл cookie, полученный со стороны сервера. Поэтому разработчикам не нужно писать код для обработки входящих файлов cookie.
Каждый раз, когда браузер запрашивает защищенный ресурс, он отправляет идентификатор сессии вместе со своим запросом. Сервер может сравнить отправленный идентификатор с сохраненными записями в базе данных и осуществить проверку.
Если полученный идентификатор сессии совпадает с идентификатором активной сессии в базе данных, то в ответе приходит защищенный ресурс.
Свойства аутентификации на основе файлов cookie
Аутентификация на основе файлов cookie осуществляется с учетом состояния, поскольку записи об аутентификации должны храниться как во внешнем, так и во внутреннем интерфейсе. Таким образом, в любое время внутри системы в базе данных есть список вошедших в систему пользователей.
После выхода пользователя из системы удаляются как файлы cookie на стороне браузера/клиента, так и идентификатор сессии на стороне сервера.
Подход на основе токенов
Аутентификацию на основе токенов можно применять в веб-браузерах, мобильных приложениях, настольных приложениях и даже с устройств Интернета вещей. Таким образом, клиент не ограничен веб-браузером, как в случае с файлами cookie.
Система на основе токенов отправляет подписанный токен на сторону браузера, если учетные данные пользователя корректны. Основное отличие от системы на основе файлов cookie в том, что на сторону клиента не передается подписанный файл в качестве обычных данных. Таким образом, клиент не может отдельно идентифицировать токен, отправленный с сервера.
Поэтому на стороне клиента необходим написать отдельный код для обработки этого входящего токена. Этот токен необходимо извлечь и сохранить внутри браузера. Мы можем сохранить токен в локальном хранилище или хранилище сессии. Можно хранить его даже в cookie-файле.
При запросе данных с сервера клиент отправляет запрос, прикрепляя туда токен. Токен прикрепляется к заголовку авторизации, кроме того перед значением токена добавляется слово “Bearer”.
Как только токен получен на стороне сервера, сервер декодирует токен и проверяет, является ли он действительным. Если токен действителен, запрашиваемые данные передаются клиенту.
Свойства аутентификации на основе токенов
Аутентификация на основе токенов выполняется быстрее, чем аутентификация на основе cookie. Основная причина в том, что каждый раз, когда система на основе файлов cookie хочет проверить пользователя, ей нужно выполнить поиск в базе активных пользователей и найти соответствующий идентификатор сессии, что занимает больше времени.
Системы аутентификации на основе токенов подходят для приложений, где несколько доменов и поддоменов.
Системы аутентификации на основе токенов применяются как в мобильных, так и в веб-системах. Таким образом, можно сделать единообразную реализацию аутентификации и на мобильном, и на десктоп-устройстве.
Читайте также:
- Обработка аутентификации и авторизации пользователей после балансировки нагрузки веб-приложения
- WebSocket для получения автоматически обновляющихся криптографических данных
- Простая защита от DoS и брутфорс атак
Читайте нас в Telegram, VK и Дзен
Перевод статьи Lanka Rathnayaka: Beginners Guide to Authentication Basics