Маркер проверки подлинности и печенье


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

Я пытаюсь реализовать Ember Auth Rails Demo но я не понимаю причины использования аутентификации токенов, как описано в Эмбер авт вопросы и ответы на вопрос " почему маркер аутентификации?"

6 80

6 ответов:

типичное веб-приложение в основном , потому что это запрос/ответ природа. Протокол HTTP является лучшим примером протокол. Но так как большинство веб-приложений нужно state, для того, чтобы удерживать state, между сервером и клиентом, куки используются таким образом, что сервер может отправить каждый ответ обратно клиенту. Это означает, что следующий запрос от клиента будет включать этот cookie и таким образом быть распознанным сервером. Таким образом сервер может поддерживать сессии С клиент, зная в основном все о приложении state, но хранится на сервере. В этом случае ни в коем случае клиент не держит state, что не так Эмбер.js строительство.

В Эмбер.js все по-другому. Тлеющий уголек.Яш делает работу программиста проще, потому что он действительно держит state для вы, в клиенте, зная в каждый момент о нем state без необходимости делать запрос на сервер с просьбой state данные.

, удерживая state в клиенте также иногда могут возникать проблемы параллелизма, которые просто не присутствуют в ситуациях. Тлеющий уголек.js однако, имеет дело также с этими проблемами для вас, в частности ember-data построен с учетом этого. В заключение, Эмбер.js-это фреймворк предназначен для stateful клиенты.

Эмбер.JS не работает, как типичный веб-приложение, где сессии на state и соответствующие куки обрабатываются почти полностью сервером. Тлеющий уголек.Яш, имеет state полностью в javascript (в памяти клиента, а не в DOM, как некоторые другие фреймворки) и не нуждается в сервере для управления сеансом. Это приводит к Эмбер.Яш будучи более универсальным во многих ситуациях, например, когда приложение находится в автономном режиме.

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

на мой взгляд, основная причина, почему использовать маркер аутентификации вместо куки, как указано в Эмбер авт вопросы и ответы в первую очередь из-за характера Эмбер.JS framework, а также потому, что он больше подходит для stateful парадигма веб-приложение. Поэтому механизм печенья не является лучшим подходом при создании тлеющего уголька.js app.

Я надеюсь, что мой ответ придаст больше смысла вашему вопросу.

Http не имеет состояния. Чтобы авторизовать вас, вы должны "подписать" каждый запрос, который вы отправляете на сервер.

проверка подлинности маркера

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

  • плюсы:

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

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

  • запрос на сервер всегда входит в систему с помощью файла cookie авторизации.
  • плюсы:
    • Cookies могут быть помечены как "только http", что делает их невозможными для чтения на стороне клиента. Это лучше для защиты от XSS-атаки.
    • выходит из коробки - вам не нужно реализовывать какой-либо код на клиенте сторона.
  • минусы:
    • привязан к одному домену. (Поэтому, если у вас есть одностраничное приложение, которое делает запросы к нескольким службам, вы можете в конечном итоге делать сумасшедшие вещи, такие как обратный прокси.)
    • уязвимы для XSRF. Вы должны принять дополнительные меры, чтобы сделать ваш сайт защищенным от подделки межсайтовых запросов.
    • отправляются для каждого отдельного запроса, (даже для запросов, которые не требуют идентификация.)

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

  • токены должны храниться где-то (локальное/сессионное хранилище или куки)

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

  • локальное / сессионное хранилище не будет работать между доменами, используйте маркер 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/

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

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

Так вот в чем разница между cookie и token based, последний использует веб-хранилище.

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

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

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

одно из основных различий заключается в том, что куки-файлы подчиняются одной и той же политике происхождения, а токены-нет. Это создает все виды эффектов нисходящего потока.

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

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

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

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