1585еместо
uLogin - виджет авторизации через социальные сети « все идеи проекта

0

голосов

Ошибка "host is not ..."

Доброго времени суток. Спустя непродолжительное время после запроса токена(~1 минута), сервер начинает возвращать ошибку "host is not localhost:3000". При этом запросы выглядят так: "https://ulogin.ru/token.php?host=localhost%3A3000&token=XXX".

Александр, 30.09.2018, 00:47
Статус идеи: ожидает рассмотрения

Комментарии

Иван Пшеницын, 30.09.2018, 00:59
Здравствуйте.
Во-первых, проблема очевидна, разве нет? Написано понятно "домен неверный". Авторизация происходила с другого домена и при запросе дангых домен должен быть такой же.
Во-вторых, зачем вы запрашиваете данные через такое время? Токен предполагается использовать лишь один раз, непосредственно после авторизации.
Александр, 30.09.2018, 01:59
Спасибо за быстрый ответ!
По первому пункту. Интуитивно кажется, что в параметр "host" нужно передать то, что было в адресной строке браузера в момент запроса. И текст ошибки буквально гласит "host не является localhost:3000". Ваш перевод, конечно, тоже может быть корректен, но для него нужен контекст. А я так и не понял что означает "host" в контексте http-клиента. И если речь не о параметре "host", для чего нужен последний?
По второму пункту. Зачем? - случайно вышло в ходе разработки. На практике этот момент скорее всего не будет иметь никакого значения, но мне хотелось бы понять протокол, который я использую в своём приложении. Что касается остальной части - токен точно не одноразовый, проверял на практике, да и в документации про это ни слова (хотя вопрос о сроке действия токена стоило бы осветить на мой взгляд).
Иван Пшеницын, 30.09.2018, 02:38
Фактически - да, в параметре host должен быть тот host (т. е. домен), который был у страницы, с которой пользователь начал авторизацию. Не вижу расхождения с вашим мнением по поводу "интуитивно понятного". С одним уточнением: хост - это домен. В смысле, не только у нас, а практически везде и всегда хост = домен. Без протокола, порта, адреса или параметров. Просто домен.
Таким образом обеспечивается небольшая дополнительная защита, чтобы было недостаточно одного token для получения данных.

Токен не одноразовый, верно. Но эта ситуация легко может измениться и мы можем сделать его обратно одноразовым. Мы добавили многократное использование лишь около года назад,причем исключительно для своих нужд, поэтому никак не афишируем этот факт. Как я написал ранее, токен предполагается использовать лишь один раз. Если у вас есть потребность использовать его многократно - вы что-то делаете не так.
Александр, 30.09.2018, 05:02
Спасибо, ясно. Резюмируя - доступность токена гарантируется единоразово в течение нескольких секунд после его получения, а в остальном поведение считать неопределённым. Но хотелось бы отметить некоторые моменты:
1. Всё-таки баг там присутствует, поскольку поведение отличается в зависимости от домена, с которого производился вход. Я только что перезапустил приложение на 80-ом порту, т.е. просто с localhost и проблема не повторилась, более того порт вообще игнорируется, можно указать любой или вообще не указывать. Тогда как если порт был отличным от стандартного, например 3000, то эту проверку пройти вообще невозможно, не принимается ни localhost, ни localhost:3000. Т.е. вероятно при запросе токена порт сохраняется, а при проверке отбрасывается.
2. Если это сделано ради безопасности, то, возможно, стоит убрать нужный домен из текста об ошибке?
3. Касательно слова "host". "Почти всегда" - это, мягко говоря, преувеличение. Посмотрите в словарях, в контексте IT это обычно компьютер (осуществляющий маршрутизацию или оказывающий услугу), а не доменное имя, но на практике может быть вообще что угодно, например в кембриджском словаре это компания-хостер. Кроме того есть устоявшиеся термины hostname и domain name, которые значительно более конкретны.

Оставить комментарий