2016-03-01 2 views
0

Я создаю аутентификацию JWT и у меня есть некоторые сомнения:Лучший способ реализовать JWT?

  1. для повышения безопасности, может быть хорошая идея, сохранить в базе данных пользователя маркера и проверить, каждый раз, если маркер посланного API совпадает с сохраненным в базе данных? Это действительно полезно?

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

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

  4. лучше сохранить токен в качестве файла cookie или веб-хранилища?

+1

Вы читали 'jwt.io'? Если да, то почему вы задаете этот вопрос? –

+1

Одна вещь: «Я создаю аутентификацию JWT» Пожалуйста, скажите мне, что вы не катаетесь самостоятельно. Используйте [существующую библиотеку] (https://github.com/lcobucci/jwt), пожалуйста. –

+0

@ScottArciszewski. Я использую Firebase JWT. Вчера я начал читать и создавать свою первую аутентификацию jwt – Webman

ответ

2

для повышения безопасности, может быть хорошей идеей, сохранить в базе данных пользователя маркер и проверить, каждый раз, если маркер посланный API соответствует с одной сохраненной в базе данных? Это действительно полезно?

Это полностью разрушает объект использования JWT. Преимущество JWT заключается в том, что вам не нужно отслеживать сеансы на стороне сервера - они чисто клиентские. Недостатком JWT является то, что вы не можете отменить токены из-за этого (цена, которую вы платите). Если вам нужна дополнительная безопасность, не используйте JWT и отслеживайте сеансы на стороне сервера, используя случайный токен (CSPRNG, 128 бит).

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

Ну, вы можете использовать идентификатор пользователя вместо электронной почты. Например, первичный ключ вашей таблицы пользователя. Затем, если они обновляют свою информацию, токен остается в силе. Вы должны установить короткие даты истечения срока действия, поэтому, если пользователь больше не является администратором, ему придется запросить новый токен (часто называемый токеном обновления), а новый токен не будет иметь требование администратора.

лучше сохранить токен в качестве файла cookie или хранилища в Интернете?

До вас. Если он хранится в файле cookie, он отправляется с каждым запросом. Если вы хотите получить значение с помощью JavaScript, используйте веб-хранилище. Если вы используете cookie, установите флаг Secure, чтобы он не протекал через простой HTTP и флаг HttpOnly, чтобы защитить его от любых уязвимостей XSS в вашем домене. Веб-хранилище не может быть защищено от XSS таким же образом (вам нужно сделать все возможное, чтобы весь ваш домен был защищен), однако он менее вероятно, будет утечка через простой HTTP.

1

Как и в случае с ответом от @SilverlightFox - обратите внимание, что вам может потребоваться проверка базы данных для обновления токенов, но не токенов доступа.Таким образом, вы можете настроить продолжительность, как вы хотите сделать компромисс безопасности и эффективности