2016-02-02 5 views
1

Я понимаю, что JWT обеспечен. Но просто хотел узнать некоторые понятия, которые я не мог понять.Безопасен ли JWT с RS256?

Предположим, что сервер аутентификации «A» отправляет подписанный токен на сервер приложений. Если я не ошибаюсь Подписание выполняется с помощью закрытого ключа на сервере «А». Теперь сервер приложений может дешифровать токен и проверять информацию с помощью открытого ключа. Я также читаю JWT сам, он содержит как данные, так и подпись.

Некоторые из примеров, которые я видел, не используют защищенный ключ при проверке. Если я не ошибаюсь, RS256 не требует каких-либо конкретных ключей, я предполагаю, что он будет использовать общедоступные сертификаты для дешифрования.

Запрос, который у меня есть, Если JWT является автономным, почему данные не изменяются между ними.

Например предположим сервер «A» посылает содержащие следующую информацию

header.user1email.signature 

Если хакер заменяет данные в

header.user2email.signature 

используя свой закрытый ключ, как же это может быть достоверные данные? Как можно быть уверенным, что он пришел с сервера «А»?

Я понимаю, что у меня нет оснований здесь, пожалуйста, помогите?

+0

Hi @CreativeManix - Помогли ли мои ответы на ваш вопрос? Если да, не могли бы вы закрыть этот вопрос? – Juxhin

ответ

1

JWT лексемы, построенные тремя объектами и прошли через SHA256 на основе хэш-кода аутентификации сообщения (AKA HMACSHA256) следующим образом:

HEADER - содержит алгоритм и тип маркера (обычно JWT)

{ 
    "alg": "HS256", 
    "typ": "JWT" 
} 

PAYLOAD - фактические данные, передаваемые, то есть без гражданства/самого-содержащего участок

{ 
    "name": "John Doe" 
} 

И, наконец, ваш SECRET в чем-то вроде этого (вытащил из jwt.io)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. 
eyJuYW1lIjoiSm9obiBEb2UifQ. 
xuEv8qrfXu424LZk8bVgr9MQJUIrp1rHcPyZw_KSsds 

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

Это происходит потому, что маркер обычно подписано и зашифровано таким образом, что требует от вас есть закрытый ключ (SECRET) для того, чтобы фактически дешифровать его.

EDIT: После разведки через SO я натолкнулся на прекрасный example от Misch. Я рекомендую вам прочитать его!

+0

Я понимаю, что это может быть подделано, но это может быть заменено новыми данными, включая хэш, рассчитанный для новых прав данных (используя собственный хакер хакеров)? Мое сомнение заключается в том, как мы уверены, что из того места, которое мы ожидаем, без секретного ключа в нашем конце? – CreativeManix

+0

@CreativeManix - пример, который я связал в ответе, объясняет ваш вопрос - http://stackoverflow.com/questions/27301557/if-you-can-decode-jwt-how-are-they-secure JWT может только успешно обмениваться между двумя объектами (охотно). Третий объект, пытающийся каким-либо образом изменить или изменить ключ, не сможет. Это также создает еще одну проблему. Так как это без гражданства, как пользователь меняет значения полезной нагрузки (например, имя своего профиля)? Как вы регистрируете пользователя, если он действительно без гражданства? – Juxhin

+0

Спасибо, да, я видел ссылку SO, предоставленную перед тем, как задать этот вопрос, однако все же я не знаю. В примере «... они оба знают общий секрет ...». Я понимаю, что секретный ключ используется между отправителем и получателем. Поскольку JWT является автономным, я видел несколько примеров без обмена ключами, которые отправляются. пример: Azure b2c. В таких случаях, как это будет подтверждено? – CreativeManix

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