2016-10-01 3 views
0

После успешного входа в систему мое приложение-узел возвращает токен JWT.фальсифицирует действительный токен JWT

JWT подписан с идентификатором пользователя, датой истечения срока действия и тайной.

Вот как я бы генерировать маркер для пользователя с идентификатором: 1:

return jwt.sign({ 
     _id: 1, 
     exp: exp_date), 
    }, "MY_SECRET"); 
    }; 

Поскольку мой бэкенд приложение идентифицирует пользователя от его маркера:

Будет ли возможность для пользователя с " id: 1 ", чтобы изменить его действительный токен, установить его с" id: 2 ", а затем начать обманывать в обратном конце приложения, как если бы он был пользователем с" id: 2 "?

ответ

2

Нет, если кто-то получил доступ к секретному ключу, который вы используете, чтобы Подписать JSON

1

Секрет используется для подписи полезной нагрузки для последующей проверки. Посмотрите на веб-сайт JWT (https://jwt.io/), который показывает концепции довольно хорошо.

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

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

Смежные вопросы