authentication - через - токены или куки




Аутентификация токена против файлов cookie (4)

Http является апатридом, для того, чтобы разрешить вам, вы должны «подписывать» каждый запрос, отправляемый на сервер.

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

  • Запрос на сервер подписывается «токеном» - обычно это означает настройку определенного HTTP-заголовка, однако они могут быть отправлены в любой части http-запроса (тело POST и т. Д.),

  • Плюсы:

    • Вы можете разрешить только запрос, который вы хотите разрешить (файлы cookie - даже cookie авторизации отправляется для каждого отдельного запроса)
    • Иммунитет к XSRF (короткий пример XSRF - я пришлю вам ссылку по электронной почте, которая будет выглядеть как <img src="http://bank.com?withdraw=1000&to=myself" /> и если вы вошли в систему через аутентификацию cookie на bank.com и bank.com не имеет никаких средств защиты XSRF. Я выведу деньги из вашей учетной записи просто из-за того, что ваш браузер инициирует разрешенный запрос GET на этот URL-адрес). Обратите внимание: есть анти-подделка, которую вы можете сделать с проверкой на основе файлов cookie, но вы должны их реализовать.
    • Файлы cookie привязаны к одному домену. Файл cookie, созданный на домене foo.com, не может быть прочитан на домене bar.com, в то время как вы можете отправить токен в любой домен, который вам нравится. Это особенно полезно для одностраничных приложений, которые потребляют несколько служб, требующих авторизации, поэтому я могу иметь веб-приложение на домене myapp.com, которое может разрешать авторизированные клиентские запросы на myservice1.com и на myservice2.com.
  • Минусы:
    • Вы должны хранить токен где-то; в то время как файлы cookie хранятся «из коробки», местонахождение, которое приходит на ум, - localStorage (con: токен сохраняется даже после закрытия окна браузера), sessionStorage (pro: токен отбрасывается после закрытия окна браузера; con: открытие ссылки на новой вкладке приведет к тому, что вкладка будет анонимной) и файлы cookie (pro: маркер будет отброшен после закрытия окна браузера, если вы используете cookie сеанса, вы будете аутентифицированы при открытии ссылки на новой вкладке, невосприимчив к XSRF, поскольку вы игнорируете cookie для аутентификации, вы просто используете его в качестве хранилища токенов, con: файлы cookie отправляются для каждого отдельного запроса, если этот файл cookie не помечен как https, только вы открыты для человека в середине атака)
    • Немного легче сделать атаку XSS против аутентификации на токенах (т. Е. Если я смогу запустить внедренный скрипт на вашем сайте, я могу украсть ваш токен, однако аутентификация на основе файлов cookie не является серебряной маркой - в то время как файлы cookie, отмеченные как http - не может быть прочитан клиентом, клиент все равно может делать запросы от вашего имени, которые будут автоматически включать файл авторизации)
    • Запросы на загрузку файла, который должен работать только для авторизованных пользователей, требуют использования File API. Тот же запрос работает из коробки для проверки подлинности на основе файлов cookie

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

  • Запрос на сервер всегда подписан авторизацией cookie
  • Плюсы:
    • Cookie может быть помечен как «http-only», что делает их невозможными для чтения на стороне клиента, это лучше для защиты XSS-атак
    • Приходит из коробки - вам не нужно реализовывать какой-либо код на стороне клиента
  • Минусы:
    • Связано с одним доменом (поэтому, если у вас есть одностраничное приложение, которое обрабатывает запросы на несколько сервисов, вы можете в конечном итоге сделать сумасшедшие вещи, такие как обратный прокси)
    • Уязвим к XSRF, вам необходимо реализовать дополнительные меры, чтобы защитить ваш сайт от подделки подпроса
    • Отправляются для каждого отдельного запроса (даже для запроса, который не требует аутентификации)

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

В чем разница между аутентификацией маркера и аутентификацией с помощью файлов cookie?

Я пытаюсь внедрить демо-версию Ember Auth Rails, но я не понимаю причин использования аутентификации по токенам, как описано в FAQ Ember Auth по вопросу «Почему аутентификация маркера?».


Аутентификация на основе токена не имеет статуса, сервер не должен хранить информацию о пользователе в сеансе. Это дает возможность масштабировать приложение, не беспокоясь о том, где пользователь вошел в систему. Сходство веб-сервера с базой данных основано на том, что это не проблема с маркером. Таким образом, один и тот же токен может использоваться для извлечения защищенного ресурса из домена, отличного от того, с которым мы вошли в систему, который позволяет избежать другой аутентификации uid / pwd.

Очень хорошая статья здесь:

http://www.toptal.com/web/cookie-free-authentication-with-json-web-tokens-an-example-in-laravel-and-angularjs


Я считаю, что здесь есть некоторая путаница. Существенная разница между аутентификацией на основе файлов cookie и тем, что теперь возможно с веб-хранилищем HTML5, заключается в том, что браузеры созданы для отправки данных cookie, когда они запрашивают ресурсы из домена, который их установил. Вы не можете предотвратить это, не отключая куки. Браузеры не отправляют данные из Web Storage, если только код на странице не отправляет его . И страницы могут получать только данные, которые они хранят, а не данные, хранящиеся на других страницах.

Таким образом, пользователь беспокоится о том, как их файлы cookie могут использоваться Google или Facebook, могут отключить куки. Но у них меньше оснований отключать веб-хранилище (пока рекламодатели не найдут способ использовать это).

Итак, в этом разница между основанной на cookie и токеном, последняя использует Web Storage.


  • Токены нужно хранить где-нибудь (локальное / сеансовое хранилище или файлы cookie)

  • Токены могут истекать как куки, но у вас больше контроля

  • Локальное / сеансовое хранилище не будет работать в разных доменах, используйте маркерный файл cookie

  • Запросы предварительной проверки будут отправляться по каждому запросу CORS

  • Когда вам нужно что-то передать, используйте токен, чтобы получить подписанный запрос

  • С XSS легче справляться, чем XSRF

  • Токен отправляется по каждому запросу, следит за его размером

  • Если вы храните конфиденциальную информацию, зашифруйте токен

  • Веб-токены JSON могут использоваться в OAuth

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

http://blog.auth0.com/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/

http://blog.auth0.com/2014/01/07/angularjs-authentication-with-cookies-vs-token/





ember.js