Я пишу свои бакалавры, в которых мне нужно выяснить, какой метод аутентификации / авторизации лучше всего подходит для компании, с которой я сотрудничаю.
Итак, я сравнивал методы аутентификации на основе сеанса и токена, но есть несколько моментов, которые мне неясны относительно того, как работают токены и чем они лучше, чем аутентификация сеанса:
Единственные преимущества, которые мне на 100% ясны, заключаются в том, что токены могут использоваться от клиентов, у которых нет хранилища файлов cookie, и что их можно использовать с разными поддоменами и полностью отдельными доменами, потому что это не препятствует политике CORS браузеров.
- Я читал, что все файлы cookie отправляются с каждым запросом в исходный домен (за исключением случаев, когда cookie настроен на отправку только по безопасному соединению), что означает, что токен будет присутствовать дважды в запросе, если, конечно, вы не аутентифицируете пользователи из другого домена. Это правильное предположение?
- Как проходит проверка токена на сервере? После дешифрования, проверяется ли он по имени пользователя, паролю и секретному / закрытому ключу, или здесь используется только секретный / закрытый ключ?
- Если мне нужно имя пользователя / идентификатор пользователя при авторизации их для определенного ресурса на сервере, на котором я не аутентифицировал их, могу ли я слепо доверять этим учетным данным, если у меня нет исходных данных пользователя для проверки?
Наконец, во многих статьях утверждается, что токены защищают от CSRF.
CSRF: у нас также будет защита от подделки межсайтовых запросов (CSRF). Пользователи подвержены атакам CSRF, поскольку они уже могут быть аутентифицированы, скажем, на банковском сайте, и этим можно воспользоваться при посещении других сайтов.
Что для меня не имеет никакого смысла. Кажется, он говорит, что система типа OAuth предотвращает CSRF? Я не очень разбираюсь в том, как работает CSFR, поэтому здесь может быть только я, но, насколько я понимаю, ни сеансы, ни токены не защищают от этого, поскольку ни один из них не уникален для каждого запроса.
Изменить: Я только что понял, что токены могут препятствовать CSFR в том, что они не отправляются автоматически браузером, если другому сайту удается отправить форму на ваш сервер из вашего браузера. Но это означает, что токены могут быть восприимчивыми, если они извлечены из заголовка cookie на сервере, что, если вы используете JWT, не должно быть проблемой, поскольку он использует собственный заголовок авторизации, который вы должны установить с помощью JS. Но из-за этого утверждения статей на scotch.io кажутся мне чепухой.