Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.12.2021, 18:43
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 100

Аутентификация и HTTP-заголовок
Здравствуйте.

Сейчас разбираюсь с написанием системы авторизации, прочитал множество статей и не могу понять одного момента.

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

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

Буду очень благодарен за помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2021, 21:00
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

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

>> Какие то операции должны проходить на стороне клиента?
Клиент должен добавить заголовок и его значение.
Практически во всех видах клиента это выглядит как

создать HTTP_запрос = новый HTTP_запрос();
HTTP_запрос.ДобавитьЗаголово к (ИмяЗаголовка , ЗначениеЗоголовка);
HTTP_запрос.ТекстЗапроса = КакоцтаТекстЗапроса;
HTTP_запрос.Отправить();
Ответить с цитированием
  #3 (permalink)  
Старый 10.12.2021, 00:42
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 100

Сообщение от MallSerg Посмотреть сообщение
>> главный вопрос в том как именно токен попадает в этот заголовок?
Клиент сам добавляет в заголовок.
Обычно помощью специальных функций доступных у клиента.
т.е. клиент специально вызывает функции которые добавляют заголовок к HTTP запросу.

>> Какие то операции должны проходить на стороне клиента?
Клиент должен добавить заголовок и его значение.
Практически во всех видах клиента это выглядит как

создать HTTP_запрос = новый HTTP_запрос();
HTTP_запрос.ДобавитьЗаголово к (ИмяЗаголовка , ЗначениеЗоголовка);
HTTP_запрос.ТекстЗапроса = КакоцтаТекстЗапроса;
HTTP_запрос.Отправить();
Но если какая то операция по присваиванию заголовка проходит через клиент как тогда проверять доступ к определенной странице, не через промежуточную страницу ведь?

Извиняюсь за глупые вопросы, вынужденная мера так как в статьях об операциях со стороны клиента никто не рассказывал.
Ответить с цитированием
  #4 (permalink)  
Старый 10.12.2021, 04:18
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

В клиент серверной архитектуре подразумевается что клиент только запрашивает а все операции совершает сервер.

При запросе сервер отвечает что доступ запрещен.
В протоколе http для этого предусмотрены специальные статус коды
https://ru.wikipedia.org/wiki/%D0%A1...%B8%D1%8F_HTTP
Ответить с цитированием
  #5 (permalink)  
Старый 10.12.2021, 17:48
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 100

Сообщение от MallSerg Посмотреть сообщение
В клиент серверной архитектуре подразумевается что клиент только запрашивает а все операции совершает сервер.

При запросе сервер отвечает что доступ запрещен.
В протоколе http для этого предусмотрены специальные статус коды
https://ru.wikipedia.org/wiki/%D0%A1...%B8%D1%8F_HTTP
Это понятно. При запросе доступа к определённой странице на сервер отправляются некоторые данные в том числе и заголовки, если нужного заголовка авторизации с токеном нет, сервер не даёт доступа к странице. На сколько я понял, токен сохраняется в куки а после передаётся в HTTP заголовок, но где и как эти заголовки присваиваются я понять не могу. Если они присваиваются на стороне сервера и там же проверяются, то не понимаю почему тогда просто не взять токен из куки без передачи и повторной проверки на сервере.
Ответить с цитированием
  #6 (permalink)  
Старый 09.02.2022, 23:19
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 100

Сообщение от MallSerg Посмотреть сообщение
В клиент серверной архитектуре подразумевается что клиент только запрашивает а все операции совершает сервер.

При запросе сервер отвечает что доступ запрещен.
В протоколе http для этого предусмотрены специальные статус коды
https://ru.wikipedia.org/wiki/%D0%A1...%B8%D1%8F_HTTP
А вы не могли бы подсказать, как на сервере нужно принимать запросы с присвоенными заголовками?

К примеру у меня в клиенте имеется такой код:
let request = new XMLHttpRequest();
request.open('GET', document.location, false);
request.setRequestHeader('Test', 'token');
request.send(null);
request.getAllResponseHeaders().toLowerCase();


Как на сервере принять этот код и обработать для последующего вывода нужных страниц?
Ответить с цитированием
  #7 (permalink)  
Старый 10.02.2022, 09:13
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от Raadsert
Как на сервере принять этот код и обработать для последующего вывода нужных страниц?
Так смотря какой у тебя сервер...
На Node.js принимающая сторона имеет объект request в котором есть ключ headers.
Вот в нем и содержатся все данные заголовка, так же в виде пар ключ-значение...
Ответить с цитированием
  #8 (permalink)  
Старый 10.02.2022, 09:19
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Raadsert, обработка и доступ к страницам также сильно зависит от того на чем у тебя организован клиент...
Например для Реакт, Вью или Ангулар достаточно изменить нужное состояние, если клиент не авторизован.

Если использовать связку Node.js + его шаблонизатор (например PUG), можно сделать редирект на страничку "вы не авторизованы"...
А с нее можно попасть только на регистрацию.

Т.е. фантазию можно развивать на таких делах.
Ответить с цитированием
  #9 (permalink)  
Старый 10.02.2022, 09:52
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,577

Сообщение от Raadsert Посмотреть сообщение
Это понятно. При запросе доступа к определённой странице на сервер отправляются некоторые данные в том числе и заголовки, если нужного заголовка авторизации с токеном нет, сервер не даёт доступа к странице. На сколько я понял, токен сохраняется в куки а после передаётся в HTTP заголовок, но где и как эти заголовки присваиваются я понять не могу. Если они присваиваются на стороне сервера и там же проверяются, то не понимаю почему тогда просто не взять токен из куки без передачи и повторной проверки на сервере.
Токен не сохраняется в куки.
Эти токены существуют для rest api, а они без состояния, т.е. ни на сессии ни на куки не рассчитывай, с каждым запросом надо тащить нужную инфу о пользователе.

Все работает примерно так:
- клиент хочет обратиться к api
- клиент у себя где то хранит токен доступа, да хоть в переменной какой если это SPA, или в localStorage
- итак, клиент видит что токена нет
- он по api обращается на страницу аутентификации, с именем и паролем, и сервер ему отдает этот токен
- в этом токене будет храниться все достаточное чтобы клиенту залогиниться в api
- вот и получается что достаточно ему с этим токеном в заголовке заходить, на сервере он будет залогинен
Ответить с цитированием
  #10 (permalink)  
Старый 10.02.2022, 15:41
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 100

Сообщение от MallSerg Посмотреть сообщение
В клиент серверной архитектуре подразумевается что клиент только запрашивает а все операции совершает сервер.

При запросе сервер отвечает что доступ запрещен.
В протоколе http для этого предусмотрены специальные статус коды
https://ru.wikipedia.org/wiki/%D0%A1...%B8%D1%8F_HTTP
Сообщение от ksa Посмотреть сообщение
Raadsert, обработка и доступ к страницам также сильно зависит от того на чем у тебя организован клиент...
Например для Реакт, Вью или Ангулар достаточно изменить нужное состояние, если клиент не авторизован.

Если использовать связку Node.js + его шаблонизатор (например PUG), можно сделать редирект на страничку "вы не авторизованы"...
А с нее можно попасть только на регистрацию.

Т.е. фантазию можно развивать на таких делах.
У меня Node.js и express, без шаблонизаторов, без "Реакт", "Вью" или "Ангулар". Я вместе с первым запросом к странице, к примеру "/auth", высылаю ответ в качестве пустой страницы с js файлом (в нём код тот что выше) где он формирует заголовок и отправляет его на сервер по текущему адресу, но каким образом на сервере можно получить этот заголовок понять не могу. Обычный запрос app.get никак не реагирует если я повторно отправляю файл html но уже с информацией о заголовке.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Все делаю логично, но не работает. Сергей Ракипов Общие вопросы Javascript 30 04.07.2020 12:06
При клике передать заголовок в инпут alex-tiesto Общие вопросы Javascript 2 18.03.2019 09:34
IE + HTTPS -> HTTP nikdmt Internet Explorer 0 11.04.2014 14:55
почему селект вдруг перестал работать в эксплорере и гуглхроме? Краса (X)HTML/CSS 44 04.05.2013 19:18
Проблемы при установке модулей node.js tadjik1 AJAX и COMET 1 18.03.2012 02:20