0

Я считаю, что веб-безопасность является очень интересной темой, и я пытаюсь научиться создавать веб-службы API и RESTful. Я читал this answer и просто имел некоторые вопросы к процессу, описанному в Way-2. Я понимаю суть Way-2, но у меня возникают вопросы на этапе 4.RESTful Authentication - Вопросы о процессе

Сначала давайте опишем переменную токена.

$token = '123'; 
$tokenHashed = 'abc'; 
$tokenEncrypted = 'xyz'; 

На шаге 4 мы проверили пользователь, и теперь настало время, чтобы создать маркер и связать его с пользователем в базе данных, а также отправить его клиенту. Вот вопросы, у меня есть об этом процессе:

  1. Маркер мы храним в базе данных, то это «хэшируются (ABC)», «зашифрован (хуг)», или «ни (123)»?
  2. Когда мы отправляем его клиенту, мы отправили его «хэшированные (abc)», «зашифрованные (xyz)» или «ни (123)»?
  3. Где этот токен хранится на клиентской машине? Я использую PHP, так ли это в переменной $ ['SESSION'] или $ ['COOKIE']? Это имеет значение? Какой и почему?

Я думаю, что он охватывает все под шагами 4, поэтому давайте перейдем к шагу 5. Одна вещь, которая касается меня в отношении шага 5, состоит в том, что он говорит: «Затем вызывающий отправляет этот токен аутентификации ...» Я ' читал, что вы НИКОГДА не передать маркер, так что сюда приходят еще несколько вопросов (предположим, клиент имеет маркер, хранящийся в любой моды ответ 2 выше говорится):

  1. передает ли клиент маркер " hashed (abc) "," зашифровано (xyz) "или" ни (123) "?

    Если они просто отправляют его обратно, как мы его отправили, то в чем смысл? Если кто-то захватывает токен в любой форме, которую мы его отправили, не всегда ли будет соответствовать тому, как мы его сохранили? Например, я посылаю USER X произвольную хэшированную строку (abc). USER Y перехватывает его и отправляет мне (abc). Моя БД говорит «abc», безопасность не работает.

Возможно, я продолжу разработку/добавление вопросов в качестве ответов. Спасибо за помощь!

ответ

0

JWT - это своего рода решение, API REST должен быть без гражданства. Это означает, что каждый запрос от клиента должен включать всю информацию, необходимую для обработки запроса, поэтому сеанс php неуместен. Вы можете прочитать это: Goodbye PHP Sessions, Hello JSON Web Tokens

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

Браузер может сохранять токен в локальном хранилище html5 или, возможно, в файле cookie.

Сервер разрешает зашифрованный токен с помощью секретного ключа, а затем получает информацию из токена.

Может быть, Вы можете оставить какое-то сообщение в знак JWT как:

  1. истекает время.
  2. клиент ip.
  3. type.
  4. ... изготовленный под заказ сообщение.
Смежные вопросы