И JWT, и OAuth могут помочь вам повысить безопасность вашего веб-приложения, предлагая безопасную аутентификацию и авторизацию. Но какой из них следует реализовать, чтобы пользователи могли безопасно получать доступ к вашему веб-приложению? Чтобы ответить на этот вопрос, мы подготовили подробную статью о JWT и OAuth.
Прочитав его, вы получите четкое представление о том, что такое JWT и OAuth, какие преимущества они предлагают, чем они отличаются и какой из них вам следует реализовать для повышения безопасности вашего веб-приложения.
Без дальнейших церемоний, давайте углубимся.
Оглавление
Что такое JWT?
JWT, что означает JSON Web Token, представляет собой открытый стандарт, определяющий способ безопасного обмена информацией между двумя сторонами в виде объекта JSON. Поскольку информация имеет цифровую подпись, стороны могут доверять и проверять информацию, передаваемую через веб-токены JSON.
Относительно небольшой размер JWT позволяет отправлять их через параметр POST, URL-адрес или внутри заголовка HTTP. Веб-токен JSON состоит из трех частей: заголовка, полезных данных и подписи.
Заголовок сообщает, какой это тип токена и какой алгоритм подписи используется. Часть полезных данных JWT включает утверждения, которые представляют собой утверждения о пользователях и дополнительных данных.
Как следует из названия, часть подписи веб-токена JSON имеет подпись, проверяющую, что сообщение не было изменено в процессе.
Как работают JWT
Источник изображения: РАЗРАБОТЧИК
Ниже показано, как работает веб-токен JSON.
Вход пользователя
Пользователи входят в ваше веб-приложение, отправляя свои имена пользователей и пароли. Затем ваше приложение передает эти учетные данные для входа на сервер аутентификации.
Генерация токенов
После того как сервер аутентификации проверит учетные данные пользователей для входа, он генерирует веб-токены JSON и отправляет их пользователям. Эти JWT могут включать важную информацию о пользователях и сеансах аутентификации. Пользователи хранят эти JWT локально. В зависимости от настроек сервер также может подписывать JWT, используя общий секретный или закрытый ключ для повышения безопасности.
Проверка токена
Когда пользователи отправляют запросы на ваш сервер приложений для доступа к какому-либо ресурсу, они включают свои JWT в свои запросы к серверу. Ваш сервер приложений будет проверять подписи в JWT и проверять утверждения в полезных нагрузках, чтобы проверить, разрешен ли пользователям доступ к запрошенным ресурсам.
Если JWT действительны, пользователям будет предоставлен доступ к запрошенным ресурсам вашего веб-приложения.
Варианты использования JWT
Веб-токены JSON можно использовать следующими способами:
№1. Авторизация
После того как пользователи успешно войдут в ваше веб-приложение через конечную точку входа, сервер аутентификации выдаст им JWT. Пользователи будут использовать свои JWT для доступа к ресурсам внутри приложения, которым требуется аутентификация для подтверждения их личности.
Обмен информацией между сторонами
JSON Web Token может быть подходящим вариантом для безопасной передачи информации действительным пользователям. Веб-токены JSON подписываются, чтобы гарантировать, что информация поступает из исходного источника. Кроме того, структура JWT (часть подписи) позволяет получателям проверять, что информация не подвергается изменениям в процессе.
Преимущества JWT
Ниже приведены ключевые преимущества внедрения JWT в ваше веб-приложение.
- В отличие от токенов SAML, JWT являются легкими. Таким образом, вы можете быстро реализовать их в средах HTML и HTTP, что делает JWT идеальными для клиентских приложений, таких как мобильные приложения.
- JWT обеспечивают надежную безопасность. Вы можете симметрично подписывать JWT с помощью общего секрета, используя алгоритм HMAC, или закрытый ключ, чтобы подписать их асимметрично.
- JWT имеют встроенный механизм истечения срока действия, позволяющий установить срок действия JWT для повышения безопасности.
- Веб-токены JSON широко используются в различных решениях единого входа. В результате с JWT легко работать.
Более того, JWT могут сэкономить место для хранения базы данных в вашей компании. Это связано с тем, что ваш сервер создает только JWT, и они сохраняются на стороне клиента. Кроме того, JWT не требуют поиска в базе данных.
Таким образом, JWT можно проверить быстро, что обеспечивает превосходный пользовательский опыт.
Ограничения JWT
Хотя JWT — отличный способ авторизации пользователей. Они имеют определенные ограничения, такие как:
- Вы несете ответственность за обеспечение безопасности ключа шифрования. Если хакер получит ключ, который подписывает ваши JWT, у вас будут большие проблемы. Они могут создавать поддельные токены, которые портят ваши пользовательские данные. Это огромный риск для безопасности.
- JWT не требуют вызова базы данных для каждой проверки, и это звучит неплохо. Но если вам нужно как можно скорее отозвать один из них, вам придется внести его в черный список. Это не быстрая и простая задача.
- Когда срок действия JWT истекает, дело не только в продлении таймера. Ваша система попросит пользователя снова войти в систему, чтобы получить новый токен. Это усложняет весь процесс, требуя больше внимания к пользовательскому опыту и потокам безопасности. Чтобы упростить процесс, вы можете реализовать токены обновления в сочетании с JWT. По истечении срока действия токена доступа клиенты могут использовать эти токены обновления для запроса новых токенов доступа без повторной отправки клиентом учетных данных для входа.
- Реализация JWT в вашем веб-приложении — непростая задача; это требует дополнительных инженерных работ. Вам нужно будет настроить процесс создания токена, выбрать правильный механизм подписи, соответствующий вашему приложению, и интегрировать все это с существующей архитектурой.
JWT — это не одноэтапное решение, а скорее проект, требующий тщательного планирования и реализации.
Что такое OAuth?
OAuth, сокращение от открытой авторизации, представляет собой открытый стандартный протокол авторизации для авторизации. Это позволяет веб-приложениям или веб-сайтам получать доступ к ресурсам, размещенным сторонними приложениями, от имени пользователей без предоставления пользователями учетных данных для входа в сторонние приложения.
Теперь, написанный как OAuth 2.0 (последняя версия OAuth), он широко используется для аутентификации пользователей через сервер аутентификации.
Например, при наличии OAuth пользователи могут входить в ваше приложение, используя свои учетные записи Facebook или Google. Но они будут вводить свои учетные данные только в учетных записях Facebook или Google.
Как работает OAuth
Источник изображения: Зохо
Например, у вас есть приложение для тайм-менеджмента. А чтобы любой мог эффективно использовать ваше приложение, вам нужен доступ к его почтовым ящикам. Раньше пользователям приходилось сообщать свои учетные данные вашему приложению, чтобы оно могло получить доступ к своим почтовым ящикам. OAuth2.0 решил эту проблему.
Вот как выглядит рабочий процесс OAuth2.0:
Теперь ваше приложение для управления временем может получить доступ к почтовому ящику пользователя. Как это сделал Oauth различные типы грантовпоток авторизации может незначительно отличаться в зависимости от типов предоставления авторизации.
Преимущества OAuth
Ниже приведены основные преимущества использования OAuth.
- OAuth — широко распространенный стандарт. Это означает, что все ведущие службы аутентификации понимают и используют OAuth.
- Пользователи найдут множество плагинов и функций OAuth на выбор благодаря его широкому использованию и совместимости.
- OAuth предлагает протестированные клиентские библиотеки практически для всех языков программирования и веб-платформ. Таким образом, вы можете использовать предпочитаемый вами язык с OAuth.
- OAuth очень безопасен и хорошо проверен. Поскольку он настолько широко используется, эксперты уже рассмотрели все возможные риски безопасности.
- OAuth отлично подходит для разделения кода. Код вашего основного приложения не перепутается при выполнении задач аутентификации. Это упрощает управление и обновление вашего приложения в долгосрочной перспективе.
Варианты использования OAuth
Ниже приведены некоторые популярные варианты использования OAuth:
- Наиболее распространенное использование OAuth 2.0 — создание сторонних приложений для доступа к учетным записям пользователей. С помощью OAuth 2.0 пользователи могут разрешать третьим лицам доступ к своим данным, хранящимся в различных службах, не предоставляя третьим лицам учетные данные для входа в эти службы.
- Как владелец веб-приложения вы можете использовать OAuth 2.0 для реализации единого входа. Вы можете изучить эти решения OAuth с открытым исходным кодом для своего проекта.
- Вы можете реализовать OAuth 2.0 в своем шлюзе API, чтобы шлюз API выступал в качестве сервера авторизации. Это гарантирует, что шлюз API будет пересылать запросы от клиентов с действительными токенами доступа.
- OAuth 2.0 может предоставить Интернету вещей и интеллектуальным устройствам, таким как холодильники или телевизоры, возможность взаимодействовать со сторонними API от имени пользователей. Это удобно, когда пользователь хочет войти в приложение на гаджетах без обычной клавиатуры, например на смарт-телевизоре или игровой консоли.
Ограничения OAuth
Диапазон доступных потоков может быть пугающим для новичков в OAuth. Речь идет не только о выборе одного; иногда вам нужна комбинация, отвечающая всем вашим требованиям безопасности. Из-за этой сложности новичкам может быть сложно понять, с чего начать, что использовать и как эффективно интегрировать это.
Каждый поток служит уникальной цели, будь то мобильные приложения, межсерверная связь или веб-приложения. Поэтому, прежде чем сделать выбор, важно тщательно проанализировать ваши конкретные потребности.
OAuth 2.0 зависит от SSL/TLS для обеспечения безопасности. Если SSL/TLS настроен неправильно, безопасность OAuth 2.0 может оказаться под угрозой.
Кроме того, OAuth может вызвать проблемы с конфиденциальностью, особенно при отслеживании активности пользователей. Когда вы используете такую услугу, как «Войти через Google», Google может узнать о вашей активности на стороннем сайте. Google может не только знать, что вы вошли в систему, но также может отслеживать, как часто и когда вы взаимодействуете с этим сайтом.
Более того, OAuth может оказаться излишним для более простых настроек, например, для приложения, имеющего только интерфейс и серверную часть. В таких случаях вам могут не понадобиться его сложности.
Разница между JWT и OAuth
JWT и OAuth выполняют важную функцию проверки личности пользователя для авторизации доступа к ресурсам. Они являются важными инструментами в сфере безопасности, но различаются по объему, сложности и применению.
ВозможностиJWTsOAuthОсновное использованиеJWT в основном ориентированы на API. OAuth охватывает веб-сайты, браузеры, API и другие приложения. Токен и протокол JWT — это формат токена. OAuth — это протокол авторизации. StorageJWT полагаются только на хранилище на стороне клиента. OAuth использует как клиентское, так и хранилище на стороне сервера. Гибкость. Объем JWT более ограничен. OAuth предлагает большую гибкость и более широкий спектр вариантов использования. Простота использования. JWT проще и понятнее. OAuth более сложен.
Хотя JWT более просты и ориентированы на безопасность API, OAuth предоставляет комплексное решение для механизма аутентификации, которое можно адаптировать к различным сценариям.
А OAuth может позволить пользователям разрешить стороннему приложению получать доступ к их данным на другой платформе, не раскрывая свои данные для входа.
Будет ли один из них лучше, зависит от конкретных потребностей рассматриваемой системы или сети.
Можете ли вы использовать JWT и OAuth вместе?
Хотя JWT и OAuth служат разным целям, вы можете объединить их вместе.
Протокол OAuth не определяет какой-либо формат токена, который должен строго использоваться. Таким образом, вы можете реализовать JWT в OAuth.
Например, сервер аутентификации OAuth2 может выдать токен доступа с использованием JWT. И этот JWT может включать в полезную нагрузку дополнительную информацию, повышая производительность. Это связано с тем, что количество обращений между серверами аутентификации и ресурсами будет сокращено.
Объединение JWT и OAuth2 также может происходить с помощью подхода с двумя токенами — в этом методе OAuth2 выдает два отдельных токена: access_token и JWT. JWT содержит дополнительную идентификационную информацию. Этот подход обеспечивает дополнительный уровень детализации, давая вам больше контроля над доступом пользователей и данными.
Крайне важно использовать OpenID Connect при выборе этой стратегии двух токенов. OpenID Connect основан на OAuth2 и добавляет в токены больше стандартизированных полей.
Использование JWT вместо OAuth2 может ускорить и упростить выполнение конкретных задач. Но это также может усложнить разработку.
Принимая решение использовать JWT с OAuth2, подумайте, оправдывает ли повышение скорости дополнительную работу по разработке.
Заключение
В битве JWT и OAuth за максимальную веб-безопасность каждый из них имеет свои преимущества и недостатки. JWT обеспечивает быструю аутентификацию без сохранения состояния, но имеет ограничения, такие как отсутствие встроенного отзыва. OAuth превосходно справляется со сложными сценариями авторизации, но может оказаться излишним для более простых проектов.
Если вам нужна надежная авторизация и эффективная аутентификация, рассмотрите возможность объединения JWT и OAuth через OpenID Connect.
Ваш выбор должен зависеть от конкретных потребностей вашего проекта, а не только от шумихи вокруг этих технологий.
Кроме того, вы можете изучить эти популярные платформы аутентификации пользователей, чтобы выбрать лучшее решение для вашего приложения.