Конференция "Сети" » авторизаций через OAuth [D7]
 
  • TopIce (10.03.10 00:17) [0]
    Есть вот такая инструкция с сайта:
    Цитата:
    Процесс авторизации следующий:

    1. Приложение запрашивает reuqest_token, соотвественно по URL'у, который был выдан сайтом;

    2. Получив request_token, сайт редиректит на страницу авторизации приложения, на которой, допустим, написано «Желаете ли вы разрешить доступ к API сайта, приложению blablabla» и две кнопочки «Разрешить», «Запретить».

    3. Пользователь нажал кнопочку «Разрешить», на сервере отметили, что данный пользователь разрешил доступ этому приложению, request_token такой-то, редиректим обратно на сайт приложения (при добавлении приложения необходимо указывать callback_uri – куда редиректить после авторизации), в адресе будет ключ oauth_token;

    Нужно, чтобы пользователь был авторизован на сайте.

    4. Ну вот, теперь осталось поменять request_token на access_token, благодаря которому мы можем обращаться к API сайта, обращаемся по адресу получения access_token, передаем туда request_token и забираем access_token, на будущее его лучше сохранить в базе.

    В том случае, если пользователь нажал кнопочку «Запретить», то приложение не сможет получить access_token и не получиться авторизоваться.
    В итоге, имеем, request_token – нужен только для авторизации, access_token – тот самый ключ, благодаря которому приложение авторизуется.

    Помогите реализовать это в делфи. Уже весь гугл перерыл и не нашел ничего.
  • Тихон (13.09.11 16:46) [1]
    Та же проблема... Не получается.
  • Cobalt © (15.09.11 12:13) [2]
    Это ты про OpenID?
    У них же вроде сайт есть целый, наверняка там есть подробная инструкция.

    И не совсем понятно - что именно не получается?
    И что именно ты делаешь?
  • Cobalt © (15.09.11 12:15) [3]
    Ок, не OpenID, поспешил.

    Но гугл в помощь.
  • Тихон (15.09.11 16:10) [4]
    Почему не добавляет мой комментарий???
  • Тихон (15.09.11 16:24) [5]
    Vkontakte API.
    Чтобы получить access_token делаем авторизацию:

    procedure TForm1.btnLoginClick(Sender: TObject);
    var logVK, html:string;  PostVK: TStringList;
    begin
    html := IdHTTP1.Get('http://vkontakte.ru'); // надо для получения ip_h
    PostVK := TStringList.Create;
    PostVK.Clear;
    PostVK.Add('act=login');
    PostVK.Add('ip_h=' + Pars(html,'ip_h=','\"',0));
    PostVK.Add('email='+EditLogin.Text);
    PostVK.Add('pass='+ EditPass.Text);
    PostVK.Add('from_host=vkontakte.ru');
    logVK := IdHTTP1.Post('https://login.vk.com/',PostVK);
    PostVK.Free;
    ...

  • Тихон (15.09.11 16:28) [6]
    Далее делаем запрос на получение access_token:

    IdHTTP1.Get('http://api.vkontakte.ru/oauth/authorize?client_id=2471061&scope=2&display=popup&redirect_uri=api.vk.com/blank.html&response_type=token');

    Memo1.Lines.Clear;
    Memo1.Lines.add(IdHTTP1.URL.URI);

    end;



    Теперь в поле Memo1 будет адрес страницы http://api.vkontakte.ru/blank.html, без дополнительных параметров: access_token, expires_in и user_id.
    ВОПРОС: КАК вытащить из IdHTTP эти параметры (в частности нам нужен только access_token) ???
  • Cobalt © (16.09.11 16:26) [7]
    А в документации что написано? Где возвращаются "эти параметры"
  • Тихон (16.09.11 18:21) [8]
    Вообще эти параметры возвращаются в строке адреса.
    Это можно увидеть, если браузере авторизоватся на сайте vkontakte.ru и перейди по адресу:
     http://api.vkontakte.ru/oauth/authorize?client_id=2471061&scope=2&display=popup&redirect_uri=api.vk.com/blank.html&response_type=token


    Строка адреса изменится на подобную этой:
     http://api.vkontakte.ru/blank.html#access_token=c733...49e5448017b3&expires_in=86400&user_id=<Твой_id>



    Но вот из своего IdHTTP1 я получаю только до символа #. А вот все, что после этого символа где-то теряется...
  • Cobalt © (17.09.11 10:40) [9]
    Пошаговая отладка спасет отца русской демократии!
  • Тихон (18.09.11 18:04) [10]
    Интересно, и как должна помочь Пошаговая отладка !? !? !?
    ---
    Перешел с Indy на Synapse.
    Если в Indy после запроса авторизации я реально вижу, что я Online на сайте и когда я получаю главную страницу vkontakte.ru, то я получаю страницу своего профиляю. А вот в Synapse после запроса авторизации есть проблема: Кукисы устанавливаются, но авторизации на сайте не происходит, и при запросе главной страницы сайта я получаю страницу приветствия на сайте (типа Добро пожаловать).
    Вопрос: Почему авторизация не происходит??? Что надо сделать, чтоб это исправить?
  • Cobalt © (19.09.11 07:51) [11]
    Протокол - это такая вещь, которая задает конкретные параметры - кто, кому, что и где должен передать, и что получить в ответ.
    И именно ТЫ должен это узнать.

    Чтобы твой вопрос звучал так:
    "Я передаю компонентом X то-то и то-то, ожидаю в ответ се-то, а мне в ответ - шняга. Что я делаю не так?"
    Вот примерно как в 8-ом вопросе.

    Я тебе ответил, что надо пошагово пройтись по внутренностям компонентов Инди, и посмотреть - что реально отвечает сервер на твой запрос, и где в компонентах ответ изменяется (если он изменяется).
  • Тихон (19.09.11 08:10) [12]
    "Пройтись по внутренностям компонентов инди и посмотреть" - Я что, сам не догадался пошагово идти!?
    Так если бы я это видел, что он эту строку где-то возвращает, СТАЛ БЫ Я ЭТО СПРАШИВАТЬ???
    А пичкать советами, которые я и так знаю, не надо!
  • Тихон (20.09.11 21:16) [13]
    При авторизации через Synapse нужные кукисы не устанавливаются. Может это  потому, что Cookie устанавливаются с помощью js-скрипта?
    Или в Synapse проблемы с js-скриптами???
  • sniknik © (21.09.11 08:11) [14]
    > Или в Synapse проблемы с js-скриптами???
    стоит ли отвечать, вот в чем вопрос... если после совета будет реплика "не нужно пичкать тем что сам знаю".

    перечисли пожалуйста, что ты знаешь... ну чтобы не дай бог не дать уже "знаемый" совет.
  • Тихон (21.09.11 08:47) [15]
    А что, трудно недогадатся что-ли идти пошагово?
    Я же не спрашиваю например, как посмотреть значение переменной в какой-то момент времени, которая постоянно меняет свое значение!
    ПОВТОРЯЮ: Стал бы я спрашивать про все это, если бы я это знал???
    Я спрашиваю конкретные вопросы:
    КАК ВЫТАЩИТЬ ИЗ IdHTTP1 ПАРАМЕТР access_token ПОСЛЕ АВТОРИЗАЦИИ ПРИЛОЖЕНИЯ?
    ПОЧЕМУ В Synapse НЕ ПРОИСХОДИТ АВТОРИЗАЦИЯ ПОЛЬЗОВАТЕЛЯ? Если по возможностям эта библиотека соответствует популярным Indy и стабильность у неё получше, то ПОЧЕМУ В INDY АВТОРИЗАЦИЯ ПРОХОДИТ НОРМАЛЬНО, А В SYNAPSE КОСЯК С ЭТИМ???
    И если уж отвечаете, то ОТВЕЧАЙТЕ ПО ТЕМЕ! И НЕ НАДО ПРИДИРАТСЯ К СЛОВАМ!
    А отвечать ради того, чтобы что-то хоть написать и себя показать, то уж лучше тогда не пишите, если действительно не знаете!
    А если знаете, то будьте добры помочь!
  • sniknik © (21.09.11 09:46) [16]
    в Cobalt ©   (19.09.11 07:51) [11] конкретно ПОМОЩЬ, что нужно чтобы решить проблему. или иди на форум телепатов.

    > Если по возможностям эта библиотека соответствует
    вообще-то она не соответствует. "функциональности" в indy больше, пусть и не всегда работающей, а синапс стабильнее т.к. все что там есть работает, а того чего нет нужно писать самому и "валить на разрабов" в этом случае не получится.
  • Тихон (21.09.11 13:02) [17]
    [11] - это понятно. Но как мне это должно было помочь в написании какого- дополнительного кода?
    Это все равно что писать сочинение не прочитав книгу!
    Значит (например) если нужен еще один какой нибудь компнент, то я сам должен догадатся КАКОЙ ЖЕ ЭТО КОМПОНЕНТ, и перебирать всю палитру компонентов... Так что-ли???
    А по поводу соответствует/не соответствует все претензии сюда: http://www.interface.ru/home.asp?artId=22206
    Я лишь процитировал!!!
    А раз все что там есть работает, почему НЕ РАБОТАЕТ то, что там есть???
    Дайте тогда ссылки, где об этом подробнее написано, я не нашел, что бы мне реально помогло!
  • sniknik © (21.09.11 15:13) [18]
    > то я сам должен догадатся КАКОЙ ЖЕ ЭТО КОМПОНЕНТ
    1 твоя же претензия
    > А что, трудно недогадатся что-ли идти пошагово?
    т.е. от нас ты ждешь что догадаются что ты знаешь/сделал а что нет, а вот к себе того же не приемлеш...

    2 проблема как говоришь с синапсе, нам что догадаться какой компонент ты используешь и как? (опять что то знакомое...)

    > Я лишь процитировал!!!
    цитата без указания источника не цитата... я вот лишь поделился собственными наблюдениями. и ссылок дать не могу.

    > А раз все что там есть работает, почему НЕ РАБОТАЕТ то, что там есть???
    с чего взял, что оно там есть и не работает?

    > не нашел, что бы мне реально помогло!
    реально бы помогло если бы ты следовал советам тех у кого спрашиваешь, (все тоже [11]) здесь помогло. а вот скандалить, врать, скрывать инфу, выдвигать потребительские претензии, указывать отвечающим как и что отвечать точно не помогает, проверено временем.
  • sniknik © (21.09.11 15:16) [19]
    >> Или в Synapse проблемы с js-скриптами???
    > стоит ли отвечать, вот в чем вопрос...
    проверим.
    ни в Synapse ни в Indy нет проблем с js-скриптами... нет скриптов и нет с ними проблем значится...
  • Тихон (26.09.11 16:27) [20]
    [11] НИКАК НЕ ПОМОГ В СЛЕДУЮЩЕМ:
    Надо использовать не IdHTTP1.URL.URI, а Location того же IdHTTP1 и
    обрабатывать каждый редирект до тех пор, пока не возвратит нужные параметры.
    Неужели это так трудно было написать???
    И [11] мне НИКАК НЕ ПОМОГ ! ! !
    ---
    А что, в synapse разве еще что-то есть, что используется для сабжа, кроме HTTPSend?
    > ни в Synapse ни в Indy нет проблем с js-скриптами... нет скриптов и нет с ними проблем значится...
    Как это нет скриптов? Я делаю авторизацию на сайте vkontakte.ru, как это видно по коду ранее [5].
    На страницах сайта есть js-скрипт с функциями установки Cookie.
    Судя по содержимому эта функция устанавливает кукисы, начинающиеся с "remix" (например remixsid).
    Но Synapse почему-то отказывается выполнять эту функцию, потому  в кукисах нет тех имен,
    которые устанавливает эта функция из js-скрипта (нету кукиса с именем remixsid).
    Да, мож я что не так делаю, но вот что именно!?
    Код авторизации на Synapse нужен?
  • Сергей М. © (26.09.11 17:25) [21]

    > Как это нет скриптов?


    Да вот так)
    Нет их.Совсем нет. Вообще нет)
  • Тихон (26.09.11 20:14) [22]
    Скрипт можно увидеть в исходном коде страницы, если перейти по адресу одной из переадресаций:
    http://vkontakte.ru/login.php?act=slogin
    ---
    Код скрипта:

    <script type="text/javascript">
    var _ua = navigator.userAgent;
    var locDomain = 'vkontakte.ru'.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
    if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) {
     document.domain = locDomain;
    }

    function setCookieEx(n, v, s) {
     var d = new Date();
     d.setTime(d.getTime() + 1000 * 60 * 60 * 24 * 365);
     var e = s ? ('; expires=' + d.toGMTString()) : '';
     document.cookie = 'remix' + n + '=' + escape(v) + e + '; path=/; domain=.' + locDomain;
    }

    var cks = ['mid', 'sid', 'gid', 'email', 'pass']; for (var i in cks) { setCookieEx(cks[i], '', 1); }
    parent.onLoginFailed(0);
    </script>

  • Сергей М. © (26.09.11 22:12) [23]

    > Тихон   (26.09.11 20:14) [22]


    Да мало ли что там еще можно увидеть)

    Речь идет об TIdHTTP и THTTPSend, которые не исполняют JS-скрипты, ибо такая возможность в них попросту не реализована. Вообще не реализована. Совсем не реализована.
  • Тихон (27.09.11 12:08) [24]
    Почему ТОГДА TidHTTP исполняет этот скрипт???

    > Да мало ли что там еще можно увидеть)

    И что там еще можно увидеть???? Расскажи, мне оч интересно!
    А если так, как ты говоришь, то тогда вообще Indy, Synapse можно постовить под сомнение...
  • Сергей М. © (27.09.11 12:41) [25]

    > Почему ТОГДА TidHTTP исполняет этот скрипт?


    Ничего он не исполняет, не болтай ерундой)


    > тогда вообще Indy, Synapse  можно постовить под сомнение


    Это с какого же перепугу ?
    У HTTP-компонентов в обеих упомянутых библ-ках иные задачи - поддержка прикладного транспортного слоя, а именно HTTP. До HTML же, к коему имеют прямое отношение скрипты, им дела нет - этим слоем занимаются интерпретаторы скриптов.

    Вот тут

    http://www.delphimaster.net/view/2-1271459822/all

    один товарищ воевал с граблями чуть пораньше тебя, почитай внимательно дискуссию.
  • Тихон (27.09.11 14:33) [26]
    Даже и не подумаю открывать!!! Мне то, что там написано и НЕ НАДО.
    Ты внимательно читай то, о чем я спрашиваю! И не надо юлить вокруг да около.
    Какое мне дело до твоих интерпретаторов скриптов и при чем тут они!?
    И ваши советы тоже УЖЕ НЕ НУЖНЫ и НИКАК НЕ ПОМОГЛИ (ОСОБЕННО [11])!
    Два слова не могли написать, и больше ничего не нужно было!
    ---
    Обращайся после этого на форумы...
  • Сергей М. © (27.09.11 14:55) [27]

    > Ты внимательно читай то, о чем я спрашиваю


    Я-то внимательно читаю)
    И вижу в [13] и [20]

    в Synapse проблемы с js-скриптами?
    > Synapse почему-то отказывается выполнять эту функцию


    На что ты получил вразумительный ответ - в Синапсе, как и в Инди, нет никаких проблем с js-скриптами, потому что он, как и Инди, никакие скрипты не выполняет вообще.

    А почему у тебя там авторизация не выполняется - это мне фиолетово, и это не проблема ни Синапса ни Инди.

    Единственное чем заметно разнятся синапсов и индейский http-клиенты - это то что индейский клиент позволяет при необходимости обрабатывать редиректы автоматически, в то время при использовании синапсового клиента обрабатывать редиректы следует ручками.


    > Какое мне дело до твоих интерпретаторов скриптов и при чем
    > тут они!?


    Ты действительно идиот или прикидываешься ?)

    Ты же сам что-то там про кукиши говорил, которые якобы формируются в результате именно выполнения какого-то там скрипта.

    А т еперь следи за мыслью:

    JS-cкрипты кто исполняет ? JS-интерпретатор и никто более.
    Интерпретаторы JS-скриптов есть в Инди и в Синапсе ? Нет их там.

    Возражение есть ? Возражений нет)
  • Cobalt © (27.09.11 16:02) [28]
    Топикстартер, спасибо за интересную ссылку на OAuth
    поковыряюсь на досуге :-)
  • Тихон (27.09.11 19:30) [29]
    ТРУДНО БЫЛО ПРОСТО НАПИСАТЬ ПРИМЕРНО СЛЕДУЮЩЕЕ???
    "Надо сделать запрос авторизации и обрабатывать редиректы в ручную, т.е. снова послать запрос на ссылку предыдущего редиректа... и так до тех пор пока не получишь то, что тебе надо!"
    И ВСЁ! Ничего больше не надо было!
    И КАК ТВОИ ИНТЕРПРЕТАТОРЫ МНЕ ПОМОГУТ В ЭТОМ, А? ? ?
    И мне дела нет до того, кто их исполняет.
    А если не знаешь ответ ГЛАВНЫЙ вопрос, то так и скажи, что не знаете, и не надо цеплятся за последующие вопросы ради того, чтобы показать себя умным и обвинять меня в тупости.
    Я спрашивал про авторизацию вконтакте, а не про интерпретарор js-скриптов и кто и как их исполняет!!!
    Пример: Ты пишешь программы на Delphi и тебе не важно как и что он делает с твоим кодом, чтобы получить exe-шник. Для тебя главное конечный Результат твоей программы!
  • sniknik © (27.09.11 20:44) [30]
    да уж, как знал. не надо было отвечать... до него так и не дошло.

    > ТРУДНО БЫЛО ПРОСТО НАПИСАТЬ ПРИМЕРНО СЛЕДУЮЩЕЕ???
    без раскрытия вопроса (по подсказке в [11]) НЕВОЗМОЖНО. на абстрактные, или не озвученные (существующие только в голове автора) вообще очень трудно отвечать... впрочем форум телепатов тоже предлагался.

    > И ВСЁ! Ничего больше не надо было!
    ну это вы батенька соврамщи... отвечал то я, хоть и сомневался стоит ли, на вполне конкретный, тобой заданный вопрос -
    > Или в Synapse проблемы с js-скриптами???
    нужно было тогда подписывать типа "вопрос задан но отвечать на него не нужно"...

    > Обращайся после этого на форумы...
    совет. иди в следующий раз на форум к философам... они к словам по идее должны философски относится... типа, "ну мало ли, что сказано одно, но имелось то в виду другое". или, "ну что что вопроса как такового нет. и никто не понимает что нужно, но ведь мне ОЧЕНЬ нужно...".
    с программистами такое "не катит".
 
Конференция "Сети" » авторизаций через OAuth [D7]
Есть новые Нет новых   [134436   +21][b:0][p:0.002]