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

2

голоса

Использование callback. Плюсы и минусы. Подпись данных.

Плюсы:
1. Нет редиректа;
2. Снижается нагрузка с сервера (клиент сам делает запрос данных для входа).
Минусы:
1. Нет доверия данным полученным от пользователя;
2. Как развитие 1. - легко взламывается система аутентификации сервера.

Решение - подпись асимметричным ключом данных от uLogin и предоставление в открытом доступе открытого ключа для проверки.

Илья, 19.04.2015, 09:07
Статус идеи: ожидает рассмотрения

Комментарии

Иван Пшеницын, 20.04.2015, 11:03
Здравствуйте.
Колбек предполагает, все же, не запрос за данными к нам на сервер, а запрос на ваш сервер и получение данных оттуда. Мы внесем идею с подписью запроса в планы, но скорой реализации не могу обещать. Вы первый, кто выступил с подобным предложением.
Илья, 20.04.2015, 11:54
Привет.
Я, вроде, и не писал, что колбек делает запрос к вам на сервер. Если быть дотошным, то колбек с данными uLogin'а (полученными через вызов яваскрипта на стороне клиента) обращается к моему серверу. Но судя по дальнейшим словам вы верно поняли в чем проблема и как решается.
По моему мнению - соцсети придут к этому же, судя по общей обеспокоенности в плане безопасности. Вы просто будете впереди планеты всей (возможно :) ).
В общем у меня вопрос: в чем выразиться стоимость максимально быстрого внедрения этой фичи?
Иван Пшеницын, 20.04.2015, 11:59
Хм. А обрисуйте, пожалуйста, слабое место схемы, при которой данные пользователя от uLogin'a получает ваш сервер?
Позвольте возразить, насчет того, что вы не писали напрямую, про запрос к нам на сервер, цитируя вас:
"2. Снижается нагрузка с сервера (клиент сам делает запрос данных для входа)."
Илья, 20.04.2015, 13:20
http://ulogin.ru/help.php#faq
Пример callback функции, получающей и обрабатывающей токен:
function preview(token){
$.getJSON("//ulogin.ru/token.php?host=" +
encodeURIComponent(location.toString()) + "&token=" + token + "&callback=?",
function(data){
data=$.parseJSON(data.toString());
if(!data.error){
alert("Привет, "+data.first_name+" "+data.last_name+"!");
}
});
}

Смотрим строку "$.getJSON("//ulogin.ru/token.php?...". Куда делается запрос клиентом? К uLogin'у. В этот момент сервер еще ничего не знает про начавшуюся авторизацию. А узнает только в момент вызова callback. Следовательно сервер не несет нагрузки по ожиданию и получению данных от соцсетей через uLogin. Что равно экономии для сервера за счет ресурсов клиента.
Слабое место: если прямой запрос данных сервером предполагает доверие только uLogin'у, то callback уже подразумевает доверие неопределенному кругу лиц. Это произойдет так как я не могу задать параметры для сервера позволяющие определить откуда у клиента данные для входа и как сформирован запрос callback'ом или как-то еще.
Вкратце, при использовании сервером callback, атакующий легко может модифицировать любые данные в запросе callback.
Иван Пшеницын, 20.04.2015, 13:25
Значит я вас правильно понял изначально. Об этой ситуации я и говорил в своем первом сообщениии:
использование колбека предполагает запрос за данными не к нам на сервер, а к вам. Т.е. в приведенном выше коде запрос в getJSON должен идти не на наш сервак, а на ваш. В таком случае, никаких проблем с безопасностью не предвидится.
Этот пример чисто ознакомительный, из-за очевидных проблем безопасности его категорически не следует использовать на боевой системе. Возможно, стоило бы добавить это в нашей справке...
Илья, 20.04.2015, 13:35
Но есть же плюсы подобного решения! Вот только бы убрать проблемы с безопасностью. :)
Иван Пшеницын, 20.04.2015, 13:42
Плюс - отсутствие редиректа остается. Нагрузка на ваш сервак... Это уже дело индивидуальное. В большинстве случаем она практически не уменьшится, если делать запрос за данными с клиента. Ведь в любом случае вы потом сделаете запрос к себе на сервер, чтобы передать данные пользователя. И в текущем виде точно так же - идет один запрос с клиента на ваш сервер.
Илья, 20.04.2015, 13:53
Действительно плюс с редиректом остается.
Просто еще свежи в памяти воспоминания, когда соцсети по минутам отдавали данные пользователя и увидев решение с запросом за данными от клиента на яве заранее обрадовался.
Иван Пшеницын, 20.04.2015, 13:56
А здесь прелесть в том, что при запросе данных пользователя (с вашего сервера) уже не будет происходить общения с соцсетью, данные к этому времени, уже лежат у нас на сервере и ждут, пока вы их попросите) Общение с API соцсетей идет на этапе всплывающих окон в браузере пользователя и ждет он, а не ваш сервер.
Илья, 21.04.2015, 13:08
Разумная оптимизация - зря замалчиваете. :)
Илья, 20.04.2015, 13:33
Увидел путаницу в определениях. Два callback' присутствует. Первый callback при получении токена, второй при получении данных. Очевидно, что все мои мысли касаются второго.
Иван Пшеницын, 20.04.2015, 13:39
Вроде один колбек - функция, которая вызывается после того, как uLogin отработает и которая получает token, с которым нужно получить от uLogin'a данные пользователя.
Эта функция делает ajax-запрос к вам на сервер и передает туда токен, ваш сервер обменивает его на данные пользователя и что-то делает (регистрирует/авторизует) и возвращает в ответ ajax-запроса необходимые данные (имя пользователя, например, чтобы нарисовать его на странице). Никакого редиректа.
Илья, 20.04.2015, 13:48
Да. Тут действительно я немного размечтался (был повод).

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