Как работает проверка подлинности на основе файлов cookie?

210

Может кто-нибудь дать мне пошаговое описание того, как работает аутентификация на основе файлов cookie? Я никогда ничего не делал, включая аутентификацию или куки. Что нужно сделать браузеру? Что нужно сделать серверу? В каком порядке? Как мы обеспечиваем безопасность?

Я читал о разных типах аутентификации и о файлах cookie, но мне хотелось бы получить базовое описание того, как использовать их вместе - я только прочитал, что они часто используются вместе, но не смог найти описание того, как.

Mastid
источник

Ответы:

162

Печенье - это просто элемент в словаре. У каждого элемента есть ключ и значение. Для аутентификации ключ может быть чем-то вроде «username», а значением будет имя пользователя. Каждый раз, когда вы отправляете запрос на веб-сайт, ваш браузер будет включать файлы cookie в запрос, а хост-сервер будет проверять файлы cookie. Таким образом, аутентификация может быть выполнена автоматически таким образом.

Чтобы установить cookie, вам просто нужно добавить его в ответ, который сервер отправляет после запросов. Браузер добавит куки при получении ответа.

Существуют различные параметры, которые вы можете настроить на стороне куки-сервера, например время истечения срока действия или шифрование. Зашифрованный файл cookie часто называют подписанным файлом cookie. По существу, сервер шифрует ключ и значение в элементе словаря, поэтому только сервер может использовать эту информацию. Так что куки будут в безопасности.

Браузер сохранит файлы cookie, установленные сервером. В заголовке HTTP каждого запроса, который браузер делает к этому серверу, он будет добавлять куки. Он будет добавлять куки только для доменов, которые их устанавливают. Example.com может установить cookie, а также добавить опции в заголовок HTTP для браузеров, чтобы отправить cookie обратно в субдомены, такие как sub.example.com. Для браузера было бы неприемлемо когда-либо отправлять куки в другой домен.

Конор Патрик
источник
Что я понимаю, так это то, что браузер может отправить куки обратно в тот же домен. В связи с этим браузер учитывает субдомен при различении двух доменов?
Аакаш
1
Вы можете установить параметры в заголовке HTTP для того, как браузер обрабатывает субдомены.
Конор Патрик
288

Я понимаю, что это несколько лет назад, но я подумал, что мог бы расширить ответ Конора и добавить немного больше к обсуждению.

Может кто-нибудь дать мне пошаговое описание того, как работает аутентификация на основе файлов cookie? Я никогда ничего не делал, включая аутентификацию или куки. Что нужно сделать браузеру? Что нужно сделать серверу? В каком порядке? Как мы обеспечиваем безопасность?

Шаг 1: Клиент> Регистрация

Прежде всего, пользователь должен зарегистрироваться. Клиент отправляет HTTP-запрос на сервер, содержащий его / ее имя пользователя и пароль.

Шаг 2: Сервер> Обработка регистрации

Сервер получает этот запрос и хэширует пароль перед сохранением имени пользователя и пароля в вашей базе данных. Таким образом, если кто-то получит доступ к вашей базе данных, он не увидит реальные пароли ваших пользователей.

Шаг 3: Клиент> Логин пользователя

Теперь ваш пользователь входит в систему. Он / она предоставляет свое имя пользователя / пароль и снова, это публикуется как HTTP-запрос к серверу.

Шаг 4: Сервер> Подтверждение входа

Сервер ищет имя пользователя в базе данных, хэширует предоставленный пароль для входа и сравнивает его с ранее хешированным паролем в базе данных. Если это не произойдет, мы можем запретить им доступ, отправив код состояния 401 и завершив запрос .

Шаг 5: Сервер> Генерация токена доступа

Если все получится, мы создадим токен доступа, который однозначно идентифицирует сеанс пользователя. Находясь на сервере, мы делаем две вещи с помощью токена доступа:

  1. Сохраните его в базе данных, связанной с этим пользователем
  2. Прикрепите его к файлу ответа, который будет возвращен клиенту. Обязательно установите дату / время истечения срока, чтобы ограничить сеанс пользователя

Отныне файлы cookie будут прикрепляться к каждому запросу (и ответу) между клиентом и сервером.

Шаг 6: Клиент> Создание запросов к страницам

Вернувшись на клиентскую сторону, мы теперь вошли в систему. Каждый раз, когда клиент делает запрос на страницу, требующую авторизации (т.е. они должны войти в систему), сервер получает токен доступа из cookie и проверяет его на соответствие одному из них. в базе данных, связанной с этим пользователем. Если это проверено, доступ предоставлен.

Это должно начать вас. Обязательно очистите куки при выходе!

pllx
источник
10
Спасибо за описание. Мне просто интересно, как токен доступа обеспечивает безопасность? Может ли злоумышленник, который украл куки, выдать себя за авторизованного пользователя? Или это защищено SSL?
Richeek
6
@Richeek SSL обеспечивает перехват во время запросов / ответов, но злоумышленник может получить доступ к вашим файлам cookie на конечных точках (например, в вашем браузере). Теоретически они могут выдавать себя за зарегистрированного пользователя до истечения срока действия файла cookie. Я говорю «теоретически», потому что реализация выше не справляется с этим. В приведенной выше реализации злоумышленник будет иметь доступ до тех пор, пока токен доступа в вашей базе данных не будет обновлен (т.е. при следующем входе в систему).
PLLX
14
Вы можете аннулировать токен доступа по истечении срока действия, возможно, с «датой истечения» в вашей базе данных. Или вы можете рассмотреть возможность использования JSON Web Tokens (JWT) , которые похожи на токены доступа, но могут обрабатывать истечение срока действия токенов, помимо прочего. Подробнее о JWT здесь. Злоумышленник все еще будет иметь доступ к вашей учетной записи в течение коротких периодов времени, если у него есть ваш токен доступа / JWT, поэтому вам также следует защитить свои конечные точки.
PLLX
3
Мне потребовалось много времени, чтобы сказать спасибо! Спасибо за ваше объяснение
Richeek
4
@ManuChadha вы могли бы вместе с ключом токена / сеанса также сохранить IP-адрес пользователя вместе с другими идентифицирующими параметрами, такими как user-agent и т. Д., Если запрос затем идет с допустимым cookie, но с неверным ip, браузером и т. Д., То вы отклонить запрос и перенаправить пользователя на страницу входа для повторной аутентификации.
FalcoGer
18

Проверка подлинности на основе файлов cookie

Проверка подлинности на основе файлов cookie обычно выполняется в следующие 4 этапа.

  1. Пользователь вводит имя пользователя и пароль в форме входа и нажимает кнопку «Вход».
  2. После того, как запрос сделан, сервер проверяет пользователя на бэкэнде путем запроса в базу данных. Если запрос действителен, он создаст сеанс с использованием информации о пользователе, выбранной из базы данных, и сохранит ее. Для каждого сеанса создается уникальный идентификатор, называемый идентификатором сеанса, по умолчанию идентификатор сеанса передается клиенту через браузер.
  3. Браузер будет отправлять этот идентификатор сеанса при каждом последующем запросе, идентификатор сеанса сверяется с базой данных, на основе этого идентификатора сеанса веб-сайт идентифицирует сеанс, принадлежащий тому клиенту, а затем предоставляет доступ к запросу.

  4. Как только пользователь выходит из приложения, сеанс уничтожается как на стороне клиента, так и на стороне сервера.

Дебендра Дэш
источник