Конференция "Сети" » авторизаций через 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-скриптами... нет скриптов и нет с ними проблем значится...
 
Конференция "Сети" » авторизаций через OAuth [D7]
Есть новые Нет новых   [134435   +20][b:0][p:0.001]