Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > https авторизация, а потом переход?


Автор: jsj 5.3.2009, 04:06
Доброго времени суток, уважаемые.

Собственно вопрос.
Делаю авторизацию в админку сайта по SSL(https) с помощью Indy(TidHttp) + OpenSSL.
Post запрос вроде проходит, но следующую страничку он не грузит - собственно админку.

Из ньюансов - работает только если:
Код

  idHttp.ProtocolVersion := pv1_1;
  idHttp.HttpOptions.hoKeepOrigProtocol := True;
  

Ну и эти св-ва тоже стоят ;)
Код

  idHttp.HttpOptions.hoInProcessAuth := True;
  idHttp.HttpOptions.hoForceEncodeParams := True;
  

Есть подозрения что надо как-то передавать какие-то параметры сессии.


ЗЫ: КукиМенеджер, если что - прикручен ;)


Буду рад конструктивным комментариям и советам! smile

Автор: MetalFan 5.3.2009, 09:40
на основании чего был сделан вывод, что 
Цитата(jsj @  5.3.2009,  04:06 Найти цитируемый пост)
следующую страничку он не грузит

какие-то ошибки выдавались? или как? какая версия индей, делфи?

Автор: Poseidon 5.3.2009, 13:16
Цитата(jsj @  5.3.2009,  04:06 Найти цитируемый пост)
Делаю авторизацию в админку сайта по SSL(https) с помощью Indy(TidHttp) + OpenSSL.
Ну и? Под "OpenSSL" что скрывается? Нужно бы IdSSLIOHandlerSocket прикрутить.

Цитата(jsj @  5.3.2009,  04:06 Найти цитируемый пост)
Post запрос вроде проходит, но следующую страничку он не грузит - собственно админку.
В любом случае хоть что-то, да грузит. Хотелось бы увидеть что и очень хотелось бы увидеть код.

Автор: jsj 5.3.2009, 14:40
Indy 10.0.52
Delphi 5, Update1

TIdSSLIOHandlerSocketOpenSSL прикручен, dllки на месте, т.к. контент по https получает.
Определяю что он хоть что-то грузит, а именно, что проходит авторизация, что я попадаю на страничку сообщающую что уже залогинены, если уже залогинен, ес-сно ;)
Но после срабатывания релогина, я получаю опять страничку с вводом логина и пароля, вместо входа в админку(как срабатывает в браузере).
Ну и если не залогинены ещё, то после ПОСТ запроса - я опять получаю ту же страничку с пустой формой.
Во время входа на сайт - требуется сертификат, я его руками тоже пробывал подставлять - результат тот же (думаю, что OpenSSL и сам с ним работает).

Ошибки никакие не выдаются сейчас, раньше, когда я принудительно не сохранял версию протокола pv1_1, после ПОСТ запроса, выдавалось "Connection Closed Gracefully".

Вот! smile))
Вроде описал подробнее ;)

Код

    try
      FCurContent := IdHttp1.Get('https://suadmctrl8.ualadys.com');
      {$ifdef debug}SaveCurContent;{$endif}
    except
      on E: Exception do
      begin
        Err('Ошибка захода на фэйс админки (' + E.Message + ')');
        Exit;
      end;
    end;

    //Авторизуемся в админку ;)
    Data := TStringList.Create;
    Data.Add('login='+AdminLogin);
    Data.Add('pass='+AdminPass);
    Data.Add('Submit=Log In');
    try
      FCurContent := IdHttp1.
        Post('https://suadmctrl8.ualadys.com/login.rpx', Data);
      {$ifdef debug}SaveCurContent;{$endif}
    except
      on E: Exception do
      begin
        Err('Ошибка отправки авторизационных данных в админку (' + E.Message + ')');
        Data.Free;
        Exit;
      end;
    end;
    Data.Free;


    v    := VarArrayCreate([0, 0], varVariant);
    doc  := CoHTMLDocument.Create as IHTMLDocument2;

    v[0] := FCurContent;
    doc.write(PSafeArray(TVarData(v).VArray));
    doc.close;

    if Pos(strAlreadyAdmin, doc.body.InnerText) <> 0 then
    begin
      //Уже залогинены в админке!
    end;

    if Pos(strAdminka, doc.body.InnerText) = 0 then
    begin
      Err('Строка "' + strAdminka + '" не найдена, возможно неправильный пароль/логин.');
      Exit;
    end;

Автор: jsj 5.3.2009, 21:58
smile
Неужели никто не делал авторизацию в админку? )

Ау, откликнитесь! smile

Автор: MetalFan 5.3.2009, 22:24
а чем тут поможешь? это под отладкой надо смотреть что и куда идет.
единственно, что можно посоветовать - посмотреть сниффером, что шлет браузер и что шлет твоя прога и найти отличия.
з.ы. и еще - обнови индейцев. может поможет.

Автор: jsj 6.3.2009, 00:05
Спасибо, а что за сниффер посоветуете?

Автор: dumb 6.3.2009, 03:30
http://www.wireshark.org/

Автор: Virtuals 6.3.2009, 07:15
и что этот снифер подглядит защищенное соединение? smile 

ЗЫ имхо какая-то проблема с куками, хотя от индейцев всего можно ожидать...

Автор: MetalFan 6.3.2009, 07:41
Fiddler2 умеет. только он работает, как локальный прокси.




Автор: Virtuals 6.3.2009, 07:54
PS имхо индейцев в топку, и начать пробовать sinapse, правда с куками придется разбиратся самому ;), хотя может это и окажется проще чем доверятся индейцам

Автор: MetalFan 6.3.2009, 08:36
Virtuals, не обижай индейцев! они корошие!  smile 

Автор: Virtuals 6.3.2009, 09:29
MetalFan, ага хорошие... smile мы их просто готовить неумеем smile 

то блин там куки криво обрабатываются, то фиг SSL прикрутиш, сам недавно заморочился с https и был в шоке сколько народу мучается с индейцами.
jsj,  нужно памятник поставить что он их заставил с OpenSSL работать, (правда очень сильно не уверен что при переносе на другую машину так и останется) smile , 
вот буквально недавняя тема
http://forum.vingrad.ru/forum/topic-244487/anchor-entry1774895/0.html
а вот статейка 
http://www.delphi.int.ru/articles/49/
мне понравилось, и работа с синапсом интуитивно понятна.

Автор: jsj 7.3.2009, 03:16
Ребят спасибо, только тему решил посмотреть, т.к. решил траблу, а тут и вы в тему отписали smile

Вчера для другого проекта разбирался с косяком с авторизацией [в]контакте - индейцы тоже работать не хотели.
И я нарыл косяк в обработке куков, если в части domain=, перед именем домена стоит точка, то проверка на валидность куков в инди не проходит и они не обрабатываются.. 
Убил на это несколько ночных часов smile)) Но зато СДЕЛАЛ! smile
И, оказывается, на форуме - здесь уже это обсуждалось smile))
Но, зато сам разобрался - до ответа мог и не дойти, если бы не знал куда рыть ;)


В общем тут тот же косяк, только с другого боку (вот как помог вроде бы другой не касающийся проект).

Валидность куков не проходит, т.к. во-первых перед доменом - стоит точка(ну эт я поправил), а во-вторых, после имени домена стоит двоеточие и номер порта smile))
Типа: .domain.com:1234


Вобщем теперь все работает - всем спасибо! smile
Я очень РАД!!! smile))



ЗЫ: Надеюсь сие раскопанные грабли - помогут их обойти нашим потомкам... АУМ!!! smile))

Автор: Virtuals 7.3.2009, 10:03
jsj, ну в принципе что и требовалось доказать. /тему про косяк с куками ч тоже читал  smile /
//обрати внимание на статью по последней ссылке, у индейцев есть проблема с openssl 
вот цитата из статьи
Цитата

. В случае с Indy это сделать очень сложно. Точнее, написать приложение-то просто, но вот чтобы оно работало... Оно или требует библиотеки OpenSSL, или говорит, что найденные библиотеки не подходят. Решается проблема скачиванием "правильных версий библиотек". Но даже имея их, всё равно проблемы. Если какое-то приложение использовало "неверные библиотеки", то до перезагрузки компьютера работать ничего не будет. Или то грузится, то нет. Почему так – предположения есть, но не хочется разбираться. Есть дела поважней.

Автор: Virtuals 7.3.2009, 10:24
jsj, ну в принципе что и требовалось доказать. /тему про косяк с куками ч тоже читал  smile /
//обрати внимание на статью по последней ссылке, у индейцев есть проблема с openssl 
вот цитата из статьи
Цитата

. В случае с Indy это сделать очень сложно. Точнее, написать приложение-то просто, но вот чтобы оно работало... Оно или требует библиотеки OpenSSL, или говорит, что найденные библиотеки не подходят. Решается проблема скачиванием "правильных версий библиотек". Но даже имея их, всё равно проблемы. Если какое-то приложение использовало "неверные библиотеки", то до перезагрузки компьютера работать ничего не будет. Или то грузится, то нет. Почему так – предположения есть, но не хочется разбираться. Есть дела поважней.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)