пытаясь понять поток аутентификации jwt - PullRequest
0 голосов
/ 30 марта 2019

, поэтому я пытаюсь понять поток аутентификации jwt, и у меня есть некоторые дыры, вот что я получил:

  1. логины пользователя
  2. пользователь получает маркер доступа jwtи обновить токен (сервер не хранит ни одного из них)
  3. токен доступа длится 5 минут и обновить токен в течение 7 дней
  4. срок действия маркера истекает
  5. пользователь отправляет токен обновленияна сервер
  6. сервер проверяет:
    • если идентификатор пользователя маркера доступа (с истекшим сроком действия) == идентификатор пользователя маркера обновления
    • подтверждает, что токен обновления не истек
    • возможно проверяет, что срок действия токена доступа истек (не уверен)
  7. Если все эти условия в порядке, сервер отправляет новый токен доступа клиенту
  8. пользователь продолжает работу как обычно
  9. срок действия маркера обновления истекает
  10. Требуется подтверждение обновления токена для отправки нового

Мои вопросы:

  1. как пользователь узнает, что срок действия токена истек?может быть, клиентское приложение считает минуты?или, может быть, клиент пытается использовать токен доступа и затем получить ответ «истек токен»?

  2. - все ли условия в шаге 6 достаточны?Что если кто-то получит токен обновления от клиента, как мне защититься от этого?также проверяется ли условие 3?

  3. как сервер проверяет токен обновления?

спасибо!

Ответы [ 2 ]

2 голосов
/ 31 марта 2019

Веб-токен JSON состоит из 3 частей: заголовка, полезной нагрузки и подписи.Заголовок и полезная нагрузка не шифруются, а просто кодируются (base64), что означает, что клиент может просто декодировать эти части.

Итак, чтобы ответить на ваш первый вопрос -> клиент просто расшифрует часть полезной нагрузки и прочитает свойство exp из зарегистрированных утверждений .Если вы используете библиотеку node-jsonwebtoken , это будет выглядеть примерно так:

// get the decoded payload and header
var decoded = jwt.decode(token, {complete: true});
console.log(decoded.header);
console.log(decoded.payload)

Чтобы сервер мог проверить токен, вы должны предоставить секретный или открытый ключиз пары ключей, которая использовалась для подписания JWT.Используя node-jsonwebtoken, это будет работать следующим образом:

// verify a token asymmetric
const cert = fs.readFileSync('public.pem');  // get public key
jwt.verify(token, cert, function(err, decoded) {
  console.log(decoded.foo) // bar
});

OR

// verify a token symmetric using secret
const decoded = jwt.verify(token, 'mySecret');
1 голос
/ 31 марта 2019
  1. Нет, это не клиент, который проверяет срок действия токена, это операция на стороне сервера.И нет, конечно, это не клиентское приложение, которое проверяет срок действия, считая минуты.Да, клиент отправляет токен и получает возможный ответ «истек срок действия токена».

  2. Все просто, если токен действителен, вы можете пойти.Если нет (истек, в любом случае), то нет.Дата окончания срока действия указана в самой полезной нагрузке токена.И вы должны зашифровать свою передачу между сервером и клиентом.

  3. Сервер проверяет токен обновления так же, как он проверяет любой токен.Проверка обычно по логину / паролю в базе данных пользователя для проверки авторизации.Это просто средство для обновления токена jwt.

Подводя итог, процесс аутентификации jwt проще, чем:

  1. Клиент отправляет запросс аутентификацией
  2. Сервер отвечает токеном аккредитации
  3. Клиент использует этот токен для диалога с приложением
  4. Если срок действия токена jwt истекает, клиент отправляет токен обновления для его обновления(необязательно)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...