Откуда берется токен в реальном приложении для проверки подлинности?

#node.js #jwt

#node.js #jwt

Вопрос:

Я изучаю Node.js в настоящее время из курсов Udemy, и инструктор научит нас, как настроить JWT для аутентификации пользователя в нашем веб-приложении. Мы бы настроили логику проверки и использовали POSTMAN для отправки подписанного токена, чтобы наше приложение проверяло, правильный ли это пользователь.

Дело в том, что никто не учил, как это работает в реальном приложении, потому что в курсе мы всегда добавляем токен на предъявителя вручную в наше приложение POSTMAN. В реальном приложении, как создается токен на предъявителя, чтобы я мог проверить, авторизован ли пользователь?

Извините, если этот вопрос не имеет смысла. Я новичок и изо всех сил пытаюсь объяснить проблему.

Комментарии:

1. Обратитесь к этому: developer.okta.com/blog/2018/11/13 /…

2. Или обратитесь к этому: medium.com/@siddharthac6 /…

3. Когда вы выполняете аутентификацию, что означает, что вы попадаете на маршрут, подобный /api/auth который является login, api возвращает токен в ответе header , предполагая, что ваш логин успешен. Затем в вашем интерфейсе, таком как React или Angular, вам нужно будет сохранить токен в браузере, в файле cookie httponly или в локальном хранилище, и каждый раз, когда вы отправляете запрос из этого браузера, вам нужно будет включать этот токен. Итак, если вы запрашиваете следующий маршрут, токен находится в заголовке вашего запроса и в серверной части, вы подтверждаете этот токен с помощью JWT.verify.

4. @HtetPhyoNaing Я думаю, вот тут-то я и запутался. Все курсы, которые я смотрел, мы вручную помещали токен в POSTMAN. Знаете ли вы какие-нибудь хорошие руководства по изучению того, как поместить токен в ответ заголовка после входа в систему?

5. @BrianBui Вам нужно пройти интерфейсный курс, такой как React (или даже vanilla JS). В разделе «Аутентификация и авторизация» вас научат делать то, что вам интересно. Но на внутреннем курсе они, возможно, не научат вас интерфейсным вещам.

Ответ №1:

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

Допустим, вы вошли на форум, когда этот параметр очищен. На странице входа вы отправляете своего пользователя / пароль на веб-сервер, веб-сервер проверяет ваши учетные данные, а затем возвращает JWT вам, клиенту. Ваш веб-браузер сохранит токен в виде файла cookie или в локальном хранилище, а затем вы сможете использовать JWT для безопасного хэширования отправляемых вами данных для обеспечения целостности при авторизации. Имейте в виду, это не форма шифрования (но вы можете их зашифровать), JWT предназначен для проверки того, что клиент является тем, за кого они себя выдают, удерживая хэш-подпись в токене. Это защищает от атак «Человек посередине» или чего-либо еще, пытающегося подделать ваши данные до их отправки на сервер. Поскольку JWT проверяет авторизацию, удобно выполнять единый вход на многочисленных веб-страницах, а это означает, что, поскольку у вас есть токен JWT, вы можете получить доступ к любой теме форума без необходимости повторной аутентификации ваших учетных данных. Чтобы вы практически использовали это, когда вы пишете веб-страницу на стороне клиента, всякий раз, когда она делает запрос, обычно вы помещаете токен предъявителя в заголовок авторизации, который должен выглядеть следующим образом

 Authorization: Bearer <token>
  

Итак, в коде JavaScript на стороне клиента, допустим, вы отправляете запрос jQuery Ajax для комментариев темы на странице форума, которую вы только что посетили. Вы уже вошли в систему, и у вас есть наш токен на предъявителя. В запросе Ajax вы бы добавили свой токен следующим образом:

 $.ajax({
     url: "http://localhost/thread",
     headers: {"Authorization": "Bearer ${jwtToken}", //which should be fetched from from the cookie
     type: "GET",
     success: function(comments) { 
        //populate thread with comments
     }
});
  

Ваш веб-сервер должен принять этот Http-запрос, проверить токен авторизации, а затем отправить обратно комментарии. Если токен авторизации не проверен, целостность запроса нарушена, и ваш сервер должен просто проигнорировать запрос.

Ознакомьтесь с документацией для получения более подробной информации и того, как они используются:https://jwt.io/introduction /

Комментарии:

1. Я думаю, что вот где я запутался. Все курсы, которые я смотрел, мы вручную помещали токен в POSTMAN. Как мы можем заставить сервер сохранять токен в заголовке клиентов, когда он делает запрос. Знаете ли вы какие-нибудь хорошие руководства в разделе «Узнайте, как поместить токен в ответ заголовка после входа в систему»?