Токены — это термин, который часто используют вместо слов «криптовалюта» или «альткоин», хотя это не совсем корректно. Несмотря на то, что эти термины похожи, между ними есть значительные различия, которые мы рассмотрим. Вместе с тем мы также выясним, что такое токены, для чего они нужны и как их можно использовать.
Что такое токены.
Исторически токен представлял собой денежный эквивалент, который выпускали частные компании и отдельные люди в качестве замены мелкой монеты, когда государства не могли чеканить достаточно денег. Однако, когда речь идет о токенах в мире криптовалют, ответ на вопрос о том, что это, немного сложнее. Для начала, нужно понять основные понятия.
Токены представляют собой записи в реестре блокчейн или иной распределенной информационной системе, которые удостоверяют наличие прав владельца на объекты гражданских прав и могут являться криптовалютой. Криптовалюты, в свою очередь, это биткоин или другой токен, который используется в международном обороте в качестве универсального средства обмена. Т
Электронная цифровая подпись. Как получить и для чего нужна ЭЦП
аким образом, криптовалюты являются токенами, работающими на собственных или сторонних блокчейнах, например Ethereum. Они могут быть выпущены как централизованно, так и децентрализованно, и проверка транзакций может осуществляться обоими способами.
Если пояснить простыми словами, то токены представляют собой записи в блокчейне, которые подтверждают права на что-либо, например, на владение каким-либо активом. В этом понимании криптовалюты также являются токенами, но не все токены являются криптовалютами.
Токены могут иметь прямую денежную ценность, зависящую от их стоимости, а также быть привязанными к цене реальных активов, например, к ценным бумагам компаний. Такие активы называются токенизированными. При покупке такого токенизированного актива не происходит приобретения акции, а токен отражает текущий курс ценной бумаги на бирже.
Какие есть токены и как их использовать.
В зависимости от контекста, цель использования токенов может отличаться. В общих чертах, токены могут быть разделены на несколько категорий: токены-утилиты, токены-акции, токенизированные активы и невзаимозаменяемые токены (NFT). Рассмотрим каждый тип более подробно.
Служебные токены.
Фактически, служебные токены представляют собой криптовалюты, которые имеют определенное применение в системе или приложении. Они могут не иметь собственного блокчейна и, как правило, работают на основе стандарта ERC-20 в сети Ethereum.
Служебные токены используются для всех транзакций в системе, они выплачиваются в качестве награды, а также могут быть использованы для покупки внутренних товаров и услуг. Их можно сравнить с игровыми монетами (или их аналогами) в онлайн-игре. Такие токены можно купить за реальные деньги или заработать, выполняя задания, а затем использовать для покупки различных внутренних бонусов.
Многие служебные токены отдельных систем доступны для торговли на криптобиржах, что придает им сходство с криптовалютами. Эти токены можно приобрести, сохранить у себя или продать, если это предусмотрено.
Токен BIT бесплатно каждый день! Гайд по заработку криптовалюты BitDAO. Амбассадорская программа
Токены-акции.
Токены-акции представляют собой вид токенов, который выдает компания в качестве своих собственных ценных бумаг. Они могут содержать долю владения компанией, предоставлять право голоса на принятие важных решений. Не следует путать их с токенизированными активами, которые будут рассмотрены ниже: токены-акции выпускаются самостоятельно компаниями, в то время как токенизированные акции не гарантируют реальной доли в компании.
Токенизированные активы.
Токенизированные активы — это токены, которые базируются на технологии блокчейн. Их стоимость привязана к реальным активам, таким как акции компаний, сырьевые товары или индексы, и может меняться в соответствии с их текущим курсом.
Тем не менее, следует отметить, что владение токенизированным активом не дает его держателю прав, которые обычно предоставляются традиционными инструментами, такими как дивиденды.
Невзаимозаменяемые токены (NFT).
Токены типа NFT выделяются тем, что каждый из них является уникальным. Этот тип токенов часто используется для продажи прав на исключительное владение произведением искусства или коллекционным предметом.
Как заработать на токенах.
Фактически, заработок на токенах не отличается от заработка на криптовалютах. То есть, необходимо покупать токены дешевле и продавать дороже. Один из наиболее прибыльных, но в то же время рискованных способов заработка на токенах — это покупка на этапе первичного предложения монет (ICO) .
В этом случае, в перспективе, может быть получена высокая прибыль, если цена вырастет после размещения. Однако также высока вероятность потерять деньги, если стоимость упадет или если компания окажется мошеннической.
Для торговли токенами также действуют основные правила инвестирования, применяемые к любым активам: не следует вкладывать больше, чем готовы потерять, и тщательно изучить рынок перед инвестированием. Всегда помните, что любые инвестиции сопряжены с риском потери всей суммы вложений. Чтобы уменьшить риски, рекомендуется диверсифицировать свой портфель, включив в него активы из разных секторов.
С другой стороны, создатели контента могут заработать на NFT, продавая свои творения. Некоторые работы именитых авторов могут быть проданы на аукционах за сотни тысяч или миллионы долларов.
Где купить токены.
Для того, чтобы приобрести цифровые токены, существует несколько способов: заработать их внутри платформы, купить перед или во время первичного размещения монет (ICO), или приобрести уже на криптобирже после листинга.
В первом случае нужно выбрать платформу и выполнять на ней задания. Например, в браузере Brave можно зарабатывать служебные токены BAT, просматривая рекламные уведомления. Чем более внимательно вы изучаете рекламу, тем больше токенов вы получаете. Когда вы накопите достаточное количество токенов, их можно вывести и продать на криптобирже.
Есть возможность приобрести токены до или во время их первичного размещения. Однако это сопряжено с риском, поэтому следует тщательно изучить всю доступную информацию о компании. Для того чтобы узнать о предстоящих ICO и понять их потенциал, можно воспользоваться такими сервисами, как ICO Tracker или TokenMarket.
Купить токены можно несколькими способами, одним из которых является покупка на криптобирже.
Однако после покупки токенов встает вопрос их хранения. Советуем держать активы для долгосрочного хранения в холодном кошельке, который не подключен к интернету.
Источник: vc.ru
Технология Software Token (Виртуальный Токен)

2012-05-10 в 19:33, admin , рубрики: аутентификация, Песочница, метки: token, аутентификация
Введение
Традиционным способом аутентификации в компьютерной системе является ввод логина и пароля. Эталонная пара логин — пароль хранится в специальной базе данных.
Использование статических паролей имеет ряд существенных минусов:
- Пользователь может забыть пароль
- Пароль может быть подсмотрен, перехвачен, подобран
Решением этой проблемы является использование ограниченности по времени действия пароля субъекта, по истечении которого пароль необходимо поменять. Суть этого метода — пароль действителен только для одного входа в систему, при каждом следующем запросе доступа — требуется новый пароль.
Еще один способ повышения защищенности системы — так называемая, расширенная или многофакторная аутентификация. Она построена на совместном использовании нескольких факторов аутентификации.
Примером использования многофакторной аутентификации и одноразового пароля является аутентификация с помощью аппаратных токенов и PIN кодов. Вместо аутентификации с помощью ввода многоразового пароля, пользователь имеет при себе специальное устройство “токен” (token), которое генерирует пароли, действующие только один раз. Токен представляет собой устройство с дисплеем и клавиатурой. Для генерирования одноразового пароля пользователь должен ввести в данное устройство свой PIN код. Таким образом, для аутентификации пользователю необходимо:
- Иметь специальное устройство – токен
- Знать свой PIN код
Полученный одноразовый пароль пользователь использует для входа в систему.
Очевидно, что аутентификация с помощью аппаратных токенов более безопасный способ, чем использование статического пароля. Однако у него есть один большой минус — пользователям необходимо иметь при себе отдельное устройство – токен. При решении данной проблемы появилась идея использовать в качестве токенов устройства, которые люди всегда носят с собой: мобильные телефоны, КПК, ноутбуки и т.д.
На устройство пользователя устанавливается специальное приложение – программный (виртуальный) токен. Он работает на принципе двухфакторной аутентификации. После установки приложения, пользователю необходимо пройти процесс регистрации своего устройства на сервере организации, к ресурсам которой требуется получать доступ. Далее для генерирования одноразового пароля пользователю необходимо ввести PIN код в приложении на своем устройстве.
Таким образом, для аутентификации пользователю необходимо:
- Загрузить на свое устройство специальное приложение — программный токен (выполняется однократно)
- Зарегистрировать устройство на сервере организации (выполняется однократно)
- Знать свой PIN код
Полученный одноразовый пароль пользователь может использовать для входа в систему.
Одной из реализаций описанного способа является приложение Mobile-OTP (Mobile One Time Passwords).
Установка продукта
Рассмотрим процесс установки продукта со стороны конечного пользователя.
(Подробный обзор системы управления доступом от установки до работы).
Загрузите java приложение на ваше устройство и пройдите процесс установки. После завершения установки приложения запустите его. Теперь необходимо инициализировать устройство на сервере организации, к ресурсам которой мы хотим получить доступ. Далее вводите произвольным образом последовательность из 25 чисел. Сервер запишет код, определяющий Ваше устройство.
После чего при попытке аутентификации сервер аутентификации считывает этот код. Если этот код совпадает со значением, полученным на сервере, аутентификация устройства считается успешной.
Принцип работы
Приложение генерирует одноразовый пароль, хешируя следующую информацию:
- Текущее время, с точностью до десятой секунды
- Четырехзначный PIN код, который вводят пользователи
- Шестнадцатеричный код, который создается, при инициализации устройства
Хеширование происходит при помощи алгоритма MD5. Алгоритм MD5 (Message Digest 5) — алгоритм однонаправленной хэш-функции, вырабатывающий из входного сообщения 128-битовое хэш-значение. Алгоритм разработан профессором Рональдом Л. Ривестом из Массачусетского технологического института. Алгоритм MD5 предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной длины и последующей проверки их подлинности. Для более подробного ознакомления с информацией пройдите по ссылке: ru.wikipedia.org/wiki/MD5.
После ввода PIN кода приложение выдает первые шесть цифр хэш-функции. Это и есть одноразовый пароль.
Таким образом, аутентификация пользователя в системе зависит от двух факторов:
- PIN код пользователя
- Код инициализации устройства
Преимущества технологии Mobile-OTP
- Нет необходимости иметь с собой специальное устройство – аппаратный токен. Его заменит Ваш мобильный телефон.
- Требуется только установка программного обеспечения на мобильное устройство. Никаких дополнительных драйверов и дополнительного программного обеспечения
- Продукт построен на основе двухфакторной аутентификации
- Продукт работает на всех мобильных устройствах, поддерживающих java приложения
- Широкий спектр поддерживаемых мобильных устройств: iPhone, Nokia, Siemens, Motorola, Sony, BlackBerry, и т.д.
- Одноразовый пароль действует только в течение одного сеанса
- Open source продукт
Источник: www.pvsm.ru
Что такое JWT токен?
Эта статья посвящена детальному разбору JWT и его возможностей. Мы изучим структуру токена и построим его с нуля. Затем рассмотрим наиболее распространенные способы использования.
7 авг. 2021 · 10 минуты на чтение
Во время разработки сервиса с пользователям типичной задачей является реализация авторизации.
Когда у вас один сервис, все довольно просто:
- Пользователь отправляет логин и пароль сервису.
- Сервис генерирует случайную строку по какому-то алгоритму.
- Сервис отдает эту строку клиенту и запоминает кому он ее отдал.
- При последующих запросах клиент отправляет куку сервису. Например, клиент хочет получить инфомрацию о себе.
- Сервис знает, что эту строку он отдал такому-то клиенту, поэтому отправляет клиенту его персональные данные.
Эта строка обычно хранится в куках браузера, а потому называется авторизационной кукой.
Все было отлично, пока не пришли микросервисы. Допустим у нас есть сервер авторизации, который находится на домене auth.foo.com, и парочка других сервисов. Один из ваших сервисов находится на домене blog.foo.com.
Когда пользователь авторизуется на сервере авторизации, то кука будет записана для домена auth.foo.com. Сервис blog.foo.com уже не будет иметь доступ к этой куке.
Это можно исправить, если хранить куку в LocalStorage браузера. Тогда возникает другая проблема. У сервиса blog.foo.com нет возможности проверить куку, так как он ее не выдавал. Сервису необходимо сделать запрос на сервер авторизации, чтобы проверить существование куки и кому она принадлежит. Это создает нагрузку на сервер авторизации.
Решением всех этих проблемы является JWT токен (JSON Web Token), который возлагает задачу по обработке аутентификационных данных на сами микросервисы, а следовательно позволяет избежать различных ошибок авторизации, увеличить производительность и улучшить масштабируемость приложения.
Однако неправильное использование JWT может негативно сказаться на безопасности приложения. Разберем примеры использования JWT, разберем распространенные ошибки в реализации схем аутентификации с применением JWT, рассмотрим основные виды атак на эти схемы и дадим рекомендации по их предотвращению.
Спонсор поста
Формат JWT
Бывают и исключения, когда в JWT отсутствует подпись. Подобный случай будет рассмотрен далее.
Header
Значение поля typ зачастую игнорируется приложениями, однако стандарт не рекомендует отказываться от него для обеспечения обратной совместимости.
Поле alg обязательно для заполнения. В приведенном случае был применен алгоритм HS256 (HMAC-SHA256), в котором для генерации и проверки подписи используется единый секретный ключ.
Для подписи JWT могут применяться и алгоритмы асимметричного шифрования, например RS256 (RSA-SHA256). Стандарт допускает использование и других алгоритмов, включая HS512, RS512, ES256, ES512, none и др.
Использование алгоритма none указывает на то, что токен не был подписан. В подобном токене отсутствует часть с подписью, и установить его подлинность невозможно.
Закодируем этот JSON в base64 и получим: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Payload
Полезна нагрузка — это любые данные, которые вы хотите передать в токене. Стандарт предусматривает несколько зарезервированных полей:
- iss — (issuer) издатель токена
- sub — (subject) “тема”, назначение токена
- aud — (audience) аудитория, получатели токена
- exp — (expire time) срок действия токена
- nbf — (not before) срок, до которого токен не действителен
- iat — (issued at) время создания токена
- jti — (JWT id) идентификатор токена
Все эти claims не являются обязательными, но их использование не по назначению может привести к коллизиям.
Любые другие данные можно передавать по договоренности между сторонами, использующими токен. Например, payload может выглядеть так:
Поскольку набор полей в части полезной нагрузки произвольный, приложение может хранить в этой части практически любые данные. Например, для ускорения работы приложения в полезной нагрузке могут храниться Ф.И.О. пользователя, чтобы не запрашивать эти сведения каждый раз из базы данных.
Payload не шифруется при использовании токена, поэтому не стоит передавать в нем чувствительные данные. Например, паспортные данные.
Размер payload не ограничен, но не стоит передавать в нем много данных. Из-за размера токена могут начаться проблемы с производительностью.
Закодируем наш payload в base64 и получим вторую часть токена: eyJpc3MiOiJBdXRoIFNlcnZlciIsInN1YiI6ImF1dGgiLCJleHAiOjE1MDU0Njc3NTY4NjksImlhdCI6MTUwNTQ2NzE1MjA2OSwidXNlciI6MX0 .
У нас уже есть 2/3 токена, осталось сгенерировать подпись.
Signature
Подпись генерируется следующим образом: Закодированные заголовок и полезная нагрузка объединяются с точкой («.») в качестве разделителя. Затем эта строка хешируется указанным в header алгоритмом. Результат работы алгоритма хеширования и есть подпись.
В нашем примере токен будет выглядеть так: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJBdXRoIFNlcnZlciIsInN1YiI6ImF1dGgiLCJleHAiOjE1MDU0Njc3NTY4NjksImlhdCI6MTUwNTQ2NzE1MjA2OSwidXNlciI6MX0.9VPGwNXYfXnNFWH3VsKwhFJ0MazwmNvjSSRZ1vf3ZUU
Другие сервисы знают пароль, которым авторизационный сервис подписывает токены. Или у них есть публичный ключ, которым они могут проверить подпись. Поэтому если кто-то попытается изменить данные в токене, то он станет не валидным. Например, если вы храните в токене роль пользователя, а злоумышленник попробует подставить туда “admin”, то он не сможет сгенерировать новую подпись для поддельного токена.
Официальный сайт jwt.io предлагает два алгоритма хэширования: HS256 и RS256. Но можно использовать любой алгоритм с приватным ключом.
Аутентификация
Схема аутентификации с использованием JWT предельно проста.
Пользователь вводит свои учетные данные в приложении или доверенном сервисе аутентификации. При успешной аутентификации сервис предоставляет пользователю токен, содержащий сведения об этом пользователе.
При последующих обращениях токен передается приложению в запросах от пользователя: в cookie, заголовках запроса, POST или GET параметрах и т. д.
Получив токен, приложение сперва проверяет его подпись. Убедившись, что подпись действительна, приложение извлекает из части полезной нагрузки сведения о пользователе и на их основе авторизует его.
Можно реализовать всю эту схему вручную, а можно использовать одну из библиотек указанных на jwt.io.
Преимущества JWT
Перечислим преимущества использования JWT в сравнении с классической схемой аутентификации, использующей сессии.
Во-первых, подход с использованием токенов позволяет не хранить информацию обо всех выданных токенах, как при классической схеме. Когда пользователь обращается к приложению, он передает ему свой токен. Приложению остается только проверить подпись и извлечь необходимые поля из полезной нагрузки.
Во-вторых, приложению вообще не обязательно заниматься выдачей и валидацией токенов самостоятельно , зачастую для этих целей используется отдельный сервис аутентификации.
В-третьих, при использовании отдельного сервиса аутентификации становится возможным организовать единую точку входа в различные сервисы с одними и теми же учетными данными (SSO). Единожды пройдя процедуру аутентификации, пользователь сможет получить доступ со своим токеном к тем ресурсам, которые доверяют этому сервису аутентификации.
В-четвертых, как было указано ранее, приложение может хранить в части полезной нагрузки практически любые данные, что при грамотной архитектуре приложения может существенно увеличить производительность.
Благодаря перечисленным факторам схема аутентификации с использованием JWT широко используется в различных корпоративных приложениях. Особенно популярна эта схема в тех приложениях, которые реализуют парадигмы микросервисной архитектуры: при таком подходе каждый сервис получает необходимые ему сведения о пользователе непосредственно из токена, а не тратит время на получение этой информации из базы данных.
Уязвимости JWT
В этом разделе будут рассмотрены основные атаки на JWT и даны рекомендации по их предотвращению.
Перехват токена
Перехват пользовательского токена может привести к ряду неприятных последствий.
Во-первых, так как JWT передается в открытом виде, для получения хранящихся в части полезной нагрузки исходных данных достаточно применить к этой части функцию base64UrlDecode. То есть злоумышленник, перехвативший токен, сможет извлечь хранящиеся в токене данные о пользователе.
В соответствии с лучшими практиками для предотвращения подобной угрозы рекомендуется:
- использовать при передаче токенов защищенное соединение;
- не передавать в токенах чувствительные пользовательские данные, ограничившись обезличенными идентификаторами.
Во-вторых, злоумышленник, перехвативший токен, сможет его переиспользовать и получить доступ к приложению от лица пользователя, чей JWT был перехвачен.
Здесь рекомендации будут следующие:
- как и в первом случае, использовать защищенное соединение при передаче токенов;
- ограничить время жизни JWT и использовать механизм refresh tokens.
Refresh tokens
В современных схемах аутентификации, основанных на JWT, после прохождения аутентификации пользователь получает два токена:
- access token — JWT, на основе которого приложение идентифицирует и авторизует пользователя;
- refresh token — токен произвольного формата, служащий для обновления access token.
Access token при таком подходе имеет сильно ограниченное время жизни (например, одну минуту). Refresh token же имеет длительное время жизни (день, неделя, месяц), но он одноразовый и служит исключительно для обновления access token пользователя.
Схема аутентификации в таком случае выглядит следующим образом:
- пользователь проходит процедуру аутентификации и получает от сервера access token и refresh token;
- при обращении к ресурсу пользователь передает в запросе свой access token, на основе которого сервер идентифицирует и авторизует клиента;
- при истечении access token клиент передает в запросе свой refresh token и получает от сервера новые access token и refresh token;
- при истечении refresh token пользователь заново проходит процедуру аутентификации.
Подбор ключа симметричного алгоритма подписи
При использовании симметричных алгоритмов для подписи JWT (HS256, HS512 и др.) злоумышленник может попытаться подобрать ключевую фразу.
Подобрав ее, злоумышленник получит возможность манипулировать JWT-токенами так, как это делает само приложение, а следовательно сможет получить доступ к системе от лица любого зарегистрированного в ней пользователя.
В нашем примере из первой части статьи для подписи JWT в качестве ключевой фразы была использована строка password. Она простая, короткая и содержится во всех основных словарях для перебора паролей. Злоумышленнику не составит труда подобрать эту ключевую фразу с использованием программ John the Ripper или hashcat.
Рекомендации для защиты от атаки в этом случае такие:
- использовать ключевые фразы большой длины, состоящие из больших и малых букв латинского алфавита, цифр и спецсимволов, и хранить их в строгой конфиденциальности;
- обеспечить периодическую смену ключевой фразы. Это снизит удобство использования для пользователей (поскольку время от времени им придется проходить процедуру аутентификации заново), но поможет избежать компрометации ключевой информации.
Использование алгоритма none
Как было упомянуто в первой части статьи, использование в заголовке JWT алгоритма none указывает на то, что токен не был подписан. В подобном токене отсутствует часть с подписью, и установить его подлинность становится невозможно.
Рассмотрим подобную атаку на нашем примере. Наш токен в незакодированном виде выглядит следующим образом
header: < «typ»: «JWT», «alg»: «HS256» >payload: < «id»: «1337», «username»: «bizone», «iat»: 1594209600, «role»: «user» >signature: ZvkYYnyM929FM4NW9_hSis7_x3_9rymsDAx9yuOcc1I
Предположим, мы хотим, чтобы приложение считало нас администратором. Для этого необходимо установить значение admin в поле role полезной нагрузки. Но при внесении в токен этого изменения подпись токена станет невалидной, и приложение не примет такой JWT.
Для обхода защитного механизма мы можем попытаться изменить значение поля alg в заголовке токена на none. Наш токен примет следующий вид:
header: < «typ»: «JWT», «alg»: «none» > payload: < «id»: «1337», «username»: «bizone», «iat»: 1594209600, «role»: «admin» >
Поскольку мы используем алгоритм none, подпись отсутствует. В закодированном виде наш JWT будет выглядеть так: eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6ImFkbWluIn0
Этот токен мы и передадим на сервер. Уязвимое приложение, проверив заголовок JWT и обнаружив в нем alg: none, примет этот токен без всяких проверок, как если бы он был легитимным, в результате чего мы получим привилегии администратора.
Чтобы защититься от такой атаки:
- необходимо вести на стороне приложения белый список разрешенных алгоритмов подписи и отбрасывать все токены с алгоритмом подписи, отличным от разрешенного на сервере;
- желательно работать строго с одним алгоритмом, например HS256 или RS256.
Изменение алгоритма подписи
При использовании асимметричных алгоритмов подпись токена осуществляется с использованием приватного ключа сервиса, а проверка подписи — с использованием публичного ключа сервиса.
Некоторые реализации библиотек для работы с JWT содержат логические ошибки, заключающиеся в том, что при получении токена, подписанного с использованием симметричного алгоритма (например, HS256), для проверки подписи в качестве ключевой фразы будет использован публичный ключ сервиса. Поскольку публичный ключ сервиса не засекречен, злоумышленник может легко получить его и использовать для подписи собственных токенов.
Для рассмотрения примера этого варианта атаки нам понадобится новый JWT:
header: < «alg»: «RS256», «typ»: «JWT» >payload: < «id»: «1337», «username»: «bizone», «iat»: 1594209600, «role»: «user» >signature: YLOVSKef-paSnnM8P2JLaU2FiS8TbhYqjewLmgRJfCj1Q6rVehAHQ-lABnKoRjlEmHZX-rufHEocDxGUYiGMjMexUQ3zt-WqZITvozJ4pkvbV-mJ1nKj64NmqaR9ZkBWtmF-PHJX50eYjgo9rzLKbVOKYOUa5rDkJPHP3U0aaBXFP39zsGdOTuELv436WXypIZBeRq2yA_mDH13TvzegWCK5sjD4Gh177bCq57tBYjhGIQrDypVe4cWBPlvwFlmG8tdpWGu0uFp0GcbTAfLUlbTSuGROj88BY0XeUs0iqmGlEICES3uqNx7vEmdT5k_AmL436SLedE0VHcyxve5ypQ
В кодированном виде он будет выглядеть следующим образом: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6InVzZXIifQ.YLOVSKef-paSnnM8P2JLaU2FiS8TbhYqjewLmgRJfCj1Q6rVehAHQ-lABnKoRjlEmHZX-rufHEocDxGUYiGMjMexUQ3zt-WqZITvozJ4pkvbV-mJ1nKj64NmqaR9ZkBWtmF-PHJX50eYjgo9rzLKbVOKYOUa5rDkJPHP3U0aaBXFP39zsGdOTuELv436WXypIZBeRq2yA_mDH13TvzegWCK5sjD4Gh177bCq57tBYjhGIQrDypVe4cWBPlvwFlmG8tdpWGu0uFp0GcbTAfLUlbTSuGROj88BY0XeUs0iqmGlEICES3uqNx7vEmdT5k_AmL436SLedE0VHcyxve5ypQ
Поскольку в этом случае мы используем для подписи алгоритм RS256, нам понадобятся публичный и приватный ключи.

Как и в предыдущем примере, модифицируем токен:
header: < «typ»: «JWT», «alg»: «HS256» >payload:
В кодированном виде заголовок и зполезная нагрузка будут выглядеть следующим образом:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6ImFkbWluIn0
Остается только подсчитать подпись с использованием публичного ключа сервиса.
Для начала переводим ключ в hex-представление:

Затем генерируем подпись с использованием openSSL:

Полученное значение E1R1nWNsO-H7h5WoYCBnm6c1zZy-0hu2VwpWGMVPK2g добавляем к уже имеющейся строке, и наш токен принимает следующий вид: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6ImFkbWluIn0.E1R1nWNsO-H7h5WoYCBnm6c1zZy-0hu2VwpWGMVPK2g
Подставляем в поле secret на jwt.io наш публичный ключ, и JWT успешно проходит проверку. Не забудьте поставить галочку secret base64 encoded.

Для предотвращения такой атаки рекомендуется:
- работать только с одним алгоритмом, например HS256 или RS256;
- выбирать хорошо известные и проверенные библиотеки для работы с JWT, которые с меньшей вероятностью содержат логические ошибки в процедурах проверки токенов.
Заключение
JSON Web Tokens — популярная и удобная технология. При правильном использовании JWT избавляет от распространенных ошибок недостаточной авторизации, позволяет просто и удобно распределить информационные потоки между сервисами, организовать единую точку входа в различные сервисы с одними и теми же учетными данными и даже повысить производительность сервиса.
Вместе с тем при неправильном использовании JWT можно подвергнуть свою систему существенным рискам, вплоть до компрометации учетных записей абсолютно всех пользователей системы.
Итак, для безопасного использования JWT следует:
- использовать защищенное соединение при передаче токенов;
- не передавать в токенах чувствительные пользовательские данные;
- ограничить время жизни JWT и использовать механизм refresh tokens;
- использовать ключевые фразы большой длины;
- обеспечить периодическую смену ключевой фразы;
- вести на стороне приложения белый список разрешенных алгоритмов подписи;
- в идеальном случае работать строго с одним алгоритмом подписи;
- выбирать хорошо известные и проверенные библиотеки для работы с JWT;
- всегда валидировать и санитизировать полученные от пользователя данные.
После беглого знакомства с JSON web tokens может сложиться впечатление, что они встроены в современные механизмы авторизации и аутентификации, такие как OAuth или OpenID. Однако это не совсем так. JSON токены действительно используются в этих системах, но не являются их частью. Более того, сфера их использование гораздо шире авторизации.
В отдельной статье вы можете посмотреть на реализацию JWT аунтентификации
Источник: struchkov.dev