У меня есть новый SPA с моделью аутентификации без статических данных с использованием JWT. Меня часто просят использовать OAuth для аутентификации, например, просят отправлять 'Bearer tokens' для каждого запроса вместо простого заголовка token, но я думаю, что OAuth намного сложнее, чем простая аутентификация на основе JWT. Каковы основные различия, должен ли я заставить аутентификацию JWT вести себя как OAuth?
Я также использую JWT в качестве XSRF-TOKEN для предотвращения XSRF, но меня просят держать их отдельно? Должен ли я держать их отдельно? Любая помощь здесь будет оценена по достоинству и может привести к созданию набора руководящих принципов для сообщества.
TL;DR Если у вас очень простые сценарии, например, одно клиентское приложение, один API, то переход на OAuth 2.0 может не окупиться, с другой стороны, если у вас много разных клиентов (браузерные, мобильные, серверные и т.д.), то соблюдение правил OAuth 2.0 может быть более управляемым, чем попытка создать собственную систему.
Как было сказано в другом ответе, JWT (Learn JSON Web Tokens) - это просто формат токена, он определяет компактный и самодостаточный механизм для передачи данных между сторонами таким образом, что их можно проверить и доверять им, поскольку они имеют цифровую подпись. Кроме того, правила кодирования JWT делают эти маркеры очень простыми для использования в контексте HTTP.
Будучи самодостаточными (фактический токен содержит информацию о данном субъекте), они также являются хорошим выбором для реализации механизмов аутентификации без статических данных (aka Взгляни, мама, никаких сессий!). Если идти по этому пути и единственное, что должна предъявить сторона для получения доступа к защищенному ресурсу, - это сам токен, то такой токен можно назвать токеном на предъявителя.
На практике то, что вы делаете, уже можно классифицировать как основанное на токенах на предъявителя. Однако учтите, что вы не используете токены на предъявителя в том виде, в котором они определены в спецификациях OAuth 2.0 (см. RFC 6750). Это означает, что вы полагаетесь на HTTP-заголовок Authorization
и используете схему аутентификации Bearer
.
Что касается использования JWT для предотвращения CSRF, то, не зная точных деталей, трудно судить об обоснованности такой практики, но, честно говоря, она не кажется правильной и/или стоящей. Следующая статья (Cookies vs Tokens: The Definitive Guide) может быть полезным чтением на эту тему, особенно раздел XSS и XSRF Protection.
И последний совет, даже если вам не нужен полный OAuth 2.0, я настоятельно рекомендую передавать токен доступа в заголовке Authorization
, а не использовать пользовательские заголовки. Если это действительно токены на предъявителя, следуйте правилам RFC 6750, если нет, вы всегда можете создать собственную схему аутентификации и все равно использовать этот заголовок.
Заголовки авторизации распознаются и специально обрабатываются HTTP-прокси и серверами. Таким образом, использование таких заголовков для отправки маркеров доступа на серверы ресурсов снижает вероятность утечки или непреднамеренного хранения аутентифицированных запросов в целом, и особенно заголовков Authorization.
(источник: RFC 6819, раздел 5.4.1)
OAuth 2.0 определяет протокол, то есть указывает, как передаются токены, JWT определяет формат токена.
OAuth 2.0 и "JWT-аутентификация" имеют схожий вид, когда дело доходит до (2-го) этапа, на котором клиент представляет токен серверу ресурсов: токен передается в заголовке.
Но "JWT-аутентификация" не является стандартом и не определяет как клиент получает маркер в первую очередь (1 этап). Вот откуда берется кажущаяся сложность OAuth: он также определяет различные способы, с помощью которых Клиент может получить маркер доступа от того, что называется Сервером авторизации.
Таким образом, реальная разница заключается в том, что JWT - это просто формат маркера, а OAuth 2.0 - это протокол (который может использовать JWT в качестве формата маркера).
Во-первых, мы должны различать JWT и OAuth. По сути, JWT - это формат токена. OAuth - это протокол авторизации, который может использовать JWT в качестве токена. OAuth использует хранение данных на стороне сервера и на стороне клиента. Если вы хотите сделать реальный выход из системы, вы должны использовать OAuth2. Аутентификация с помощью JWT-токена не может обеспечить реальный выход из системы. Потому что у вас нет сервера аутентификации, который бы отслеживал токены. Если вы хотите предоставить API сторонним клиентам, вы также должны использовать OAuth2. OAuth2 очень гибкий. Реализация JWT очень проста и не занимает много времени. Если вашему приложению нужна такая гибкость, вам следует выбрать OAuth2. Но если вам не нужен такой сценарий использования, внедрение OAuth2 - пустая трата времени.
XSRF-токен всегда отправляется клиенту в каждом заголовке ответа. Не имеет значения, отправляется ли токен CSRF в токене JWT или нет, потому что токен CSRF защищен сам по себе. Поэтому отправка CSRF-токена в JWT не нужна.
Помощью JWT (JSON веб-маркеры)- это просто формат маркера. Токенов JWT являются JSON, закодированные структуры данных содержит информацию об эмитенте, вопросу (претензии), срок действия и т. д. Он подписан для доказательства шпалоподбойки и подлинность и он может быть зашифрован для защиты токена информации с помощью симметричного или асимметричного подхода. JWT в проще, чем на основе SAML 1.1/2.0 и поддерживается всеми устройствами и является более мощным, чем СВТ(простой веб-токен).
Что OAuth2 - что OAuth2 решить проблему, что пользователь хочет получить доступ к данным с помощью клиентского программного обеспечения, такие как просмотр веб-приложения, нативные мобильные приложения или настольные приложения. OAuth2-это только для авторизации, клиентское программное обеспечение может быть разрешен доступ к ресурсам от имени пользователя, используя маркер доступа.
OpenID подключения - OpenID подключить строит на вершине OAuth2 и добавить проверку подлинности. OpenID подключения добавить некоторые ограничения на то что OAuth2, как конечную точку "userInfo", идентификационный знак, обнаружение и динамическая Регистрация OpenID провайдеров подключения и управления сеансами. Вышлю является обязательным форматом для маркера.
Защита от CSRF атак - Вы Дон'т необходимость осуществить CSRF защиту, если вы не храните маркер в браузере'ы печенье.
Вы можете прочитать более подробную информацию здесь http://proficientblog.com/microservices-security/
Похоже, всем, кто ответил Здесь пропустил вопрос спорный протокола OAuth
Из Википедии
OAuth-это открытый стандарт для делегирования доступа, часто используется для интернет-пользователей, чтобы предоставить веб-сайтов или приложений, доступ к информации на других сайтах, но не давая им пароли.[1] Этот механизм используется в таких компаниях, как Google, Facebook, Microsoft и Twitter, чтобы позволить пользователям делиться информацией о своих счетах с помощью сторонних приложений или веб-сайтов.
Ключевым моментом здесь является делегирование доступа
. Зачем кому-то создавать с OAuth, когда есть идентификатор/pwd для проверки подлинности на основе, опираясь на multifactored двиг как Мн и в дальнейшем могут быть обеспечены маркерах JWT, которые используются для обеспечения доступа к путям (как и области в OAuth) и установить прекращение доступа
Там's нет смысла использовать OAuth, если потребителям доступ к их ресурсам(конечных точек) только через своих доверенных сайтов(или приложения), которые опять размещены на конечных точках
Вы можете пройти проверку подлинности OAuth только <б>если вы провайдера OAuth
в тех случаях, когда владельцам ресурсов (пользователи) хотят получить доступ к их(вашему) ресурсы (конечные точки) через сторонний клиент(внешнее приложение).</б> и это совершенно точно создан для той же цели, хотя вы можете злоупотреблять ею в целом
Еще одно важное примечание:<БР /> Вы'вновь свободно использовать проверку подлинности Слова для проверки подлинности и авторизации OAuth, но не обеспечивают механизм проверки подлинности. Да один механизм маркера и другой протокол, но после проверки подлинности, они используются только для авторизации (управления доступом). Вы've, чтобы вернуться с OAuth или OPENID с типом проверки подлинности или своего собственного клиента учетных данных
Вышлю является открытым стандартом, который определяет компактный и автономный способ для безопасной передачи информации между сторонами. Это протокол проверки подлинности, где мы позволяем закодированных претензии (жетоны), которые должны быть переданы между двумя сторонами (клиентом и сервером) и знак выдается только после идентификации клиента. С каждым последующим запросу мы посылаем знак.
В то время как OAuth2-это механизм авторизации, где он имеет общие процедуры и установок определенных рамках. JWT можно использовать как механизм, внутри что OAuth2.
Вы можете прочитать больше об этом здесь
https://stackoverflow.com/questions/32964774/oauth-or-jwt-which-one-to-use-and-why/48333725#48333725
найти основные различия между JWT в & протокол OAuth
Протокол OAuth 2.0 определяет протокол & JWT в определяет формат маркера.
Протокол OAuth можно использовать JWT в качестве формата маркер или маркер доступа, маркер на предъявителя.
OpenID подключения в основном используют JWT в качестве формата маркеров.
JWT в строгий набор инструкций для выдачи и проверки подписанных маркеров доступа. Маркеры содержат утверждения, которые используют приложение, чтобы ограничить доступ пользователю
Что OAuth2 с другой стороны-это не протокол, его делегированный рамках полномочий. думаю, что очень подробной инструкцией, позволила пользователям и приложениям разрешать конкретные разрешения для других приложений в частных и общественных местах. OpenID Connect, который сидит на вершине OAuth2, которые дает проверка подлинности и авторизация.он подробно рассказывает, как несколько разных ролей пользователей в системе, приложений сервера как API, и клиенты, такие как веб-сайты или собственные мобильные приложения, может аутентифицировать друг с флористику
Примечание OAuth2, которые могут работать в JWT , гибкую реализацию, раздвижным для различных применений