powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / NTLM Kerberos аудентификация в Indy10
44 сообщений из 44, показаны все 2 страниц
NTLM Kerberos аудентификация в Indy10
    #35807352
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я за proxy
Хочу сделать запрос на ya.ru
Повешал IdHTTP
указал параметры нашей прокси и написал по кнопке
Memo1.Text:=IdHTTP1.Get('ya.ru');

BasicAuthentification=true
Вылазит окно с ошибкой где написано 407 ошибка Athentification required
Все данные ввел же.

Читал http://sql.ru/forum/actualthread.aspx?tid=622670 тему, но там про Indy9 и решения не нашлось кроме миграции.

Как правильно сделать запрос на Indy10 с аудентификацией ?
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807355
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты думаешь, что у них домен организован для всех пользователей Интернет?

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807357
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
непонял
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807365
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего именно?
А ты знаешь, что такое NTLM и что такое Kerberos ?


--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807375
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то нет, но что-то связанное с протоколами передачи данных. 8)
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807379
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что он пытается пройти корпоративную ису из локалки. Для синапса код я тут выкладывал точно, и ссылка жива. Ищите и обрящие. Или пишите минимальный код на десятках и я подскажу по ходу действа
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807380
revda.infoВообще-то нет, но что-то связанное с протоколами передачи данных. 8)
да неужели!?!
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807391
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да минимальный код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
 unit  Unit1;

 interface 

 uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP;

 type 
  TForm1 =  class (TForm)
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    Button1: TButton;
     procedure  Button1Click(Sender: TObject);
   private 
     { Private declarations } 
   public 
     { Public declarations } 
   end ;

 var 
  Form1: TForm1;

 implementation 

 {$R *.dfm} 

 procedure  TForm1.Button1Click(Sender: TObject);
 begin 
Memo1.Text:=IdHTTP1.Get('http://ya.ru');
 end ;

 end .


Вот он по сути:
Код: plaintext
Memo1.Text:=IdHTTP1.Get('http://ya.ru');
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807467
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АльтДумаю, что он пытается пройти корпоративную ису из локалки. Для синапса код я тут выкладывал точно, и ссылка жива. Ищите и обрящие. Или пишите минимальный код на десятках и я подскажу по ходу действа
На ya.ru? Не смеши.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807471
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revda.info
Вот он по сути:
Код: plaintext
Memo1.Text:=IdHTTP1.Get('http://ya.ru');

http://ya.ru/ не требует никакой аутентификации.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807478
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И BasicAuthentification это не NTLMv2

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807511
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Авторизацию требует наш корпоративный прокси, а ya.ru - то что нужно скачать.
Конечно если вопрользоваться WebBrowser то можно скачать впринципе все что угодно, но подгружать ядро IE не хочется для достаточно простых задач, таких как отправить GET запрос и получить 100 байт ответа.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807548
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты ответов не понимаешь?
Повторяю
авторBasicAuthentification это не NTLM
Прокси разных много.
С прокси ты обязан общать по его правилам.
Обратись к системному администратору и узнай что нужно для работы с его прокси, какие протоколы аутентификации должны быть использованы, процедуру прохождения.

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807723
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revda.info, вот проверенное решение, выделенное важно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 program  ntlmdemo;

 {$APPTYPE CONSOLE} 

 uses 
  SysUtils,
  IdAuthentication,
  IdAuthenticationNTLM,
  IdHTTP;

 type 
  TDummyProxy =  class 
   private 
     class   procedure  OnProxyAuthorization( Sender: TObject;
      Authentication : TIdAuthentication;  var  Handled : Boolean );
   end ;

 { TDummyProxy } 

 class   procedure  TDummyProxy.OnProxyAuthorization(Sender: TObject;
  Authentication: TIdAuthentication;  var  Handled: Boolean);
 begin 
  Authentication.Reset;
  Authentication.Username := '...';
  Authentication.Password := '...';
  Handled := true;
 end ;

 begin 
   with  TIdHTTP.Create(  nil  )  do 
   try 
    OnProxyAuthorization := TDummyProxy.OnProxyAuthorization;
    ProxyParams.ProxyServer := '...';
    ProxyParams.ProxyPort :=  3128 ;
    ProxyParams.BasicAuthentication := false;
    HTTPOptions := HTTPOptions + [ hoInProcessAuth ];
    WriteLn( Get('http://ya.ru') );
   finally 
    Free
   end ;
 end .

ps: IdAuthenticationSSPI.pas опять сломано... ненавижу инди
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807737
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы продолжаете кипятить?

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807749
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На старых проектах он так и работает. А еще книжка по теме... в вашем... Анатолий... переводе... распечатанная дома точно где-то есть )
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807773
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Книга есть, только она не про Инди, а про принципы работы Интернет, а Инди для примеров.
Но Инди живет по правилам Юников, а не Виндоус и Дельфи с их событийной моделью.
Не наш он, не наш. Мне хватило недели потеряного времени, что бы полностью отказаться от Инди, в пользу ICS.

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807794
%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
%
Гость
Anatoly PodgoretskyМне хватило недели потеряного времени, что бы полностью отказаться от Инди, в пользу ICS.
а как же synapse ? Судя по слухам у него писька больше.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807832
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
synapse отличный выбор, он конечно тоже синхронный, но он и расчитан на работу в консольных условия, ему гуя не нужна. Для использования в простых сервисах неплохо подходит и не такой монстр, как Инди, который все монструидальне и монструидальнее становится, и с каждой новой версией все начинать с нуля, почти нет премественности.

Борланд не особо брезглив в выборе партнеров, лишь бы халява, а автор ICS не дал согласия на включение в состав Дельфи, категорически отказался. А вот включение Инди в Дельфи принесло много вреда, как Борланду так и Инди.

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807845
%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
%
Гость
Anatoly PodgoretskyА вот включение Инди в Дельфи принесло много вреда, как Борланду так и Инди.
Зато Мишка Фленов в Библии Делфи в разделе Работа с сетью, так расхваливал их, что даже и поверить можно
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807849
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
%, думаю, тут все просто... ICS появился раньше синапса... я только в 2005 ушел с инди, но синапсы уже тогда были стабильными и практически ничем не отличались от текущего последнего билда...
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807929
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
%Anatoly PodgoretskyА вот включение Инди в Дельфи принесло много вреда, как Борланду так и Инди.
Зато Мишка Фленов в Библии Делфи в разделе Работа с сетью, так расхваливал их, что даже и поверить можно
Я выражаю свою мысль, а он свою.
И ничего странного, что они не совпадают.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807938
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альт%, думаю, тут все просто... ICS появился раньше синапса... я только в 2005 ушел с инди, но синапсы уже тогда были стабильными и практически ничем не отличались от текущего последнего билда...
ICS существует начиная с первой Дельфи и до она поддерживалось до 5 версии.
Когда появился Синапс не знаю, но у них разное назначение, ICS и Indy это продукт широкого назначения, Синапс менее, но он ближе к Indy и поэтому хороший претедент на его замену.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807941
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разве есть готове решение от ICS ?
Не слышал и не видел ни разу, я уже начал через WebBrowser писать, кшна это очень плохо.

Дак покажите же тогда письку ICS ?
Готовые компоненты, легкое использование ?

Чем вы хвастаетесь-то ?

Меня интересует выход за пределы корпоративного прокси тупым GET и получить ответ 100 байт.
Или прочитать любую страничку.

Спасибо за то что вы столько много уделили этому вопросу времени.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807952
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revda.info пишет:

> Дак покажите же тогда письку ICS ?

А нахрена оно _нам_ надо ;)? Мы его тебе не продаём.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35807966
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автортупым GET
тупым GET не получится, как раз админстраторы и боролись, что бы это не проходило.

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808013
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revda.info, капец... я дал готовое решение на инди, в разделе есть решение и на синапсе... вы загадочны...
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808095
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По вашему примеру Альт я получаю сообщение:
Could not load SSL library

не понимаю в чем тут проблема, код один к одному.
Изменены имя,порт, имя и парол


По ICS пока не нашел вменяемых данных
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808128
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слил стабильную ICS
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808176
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здравствуйте... так вы еще и отладчиком пользоваться не умеете )))))) комедия... зачем вы лезете в то, что не понимаете... как это работает и зачем )))))))))))
Инди умеет пользоваться двумя типами реализаций ntlm... первая платформозависимая... SSPI пользуется виндовыми библиотеками... вторая "NTLM" универсальна и пользуется библиотеками OpenSSL (ics делает это аналогично), реализации синапса две нативная и OpenSSL.
Тут вам не сливать надо... тут азбуку надо открывать )))))))))
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808181
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знал-п дак и не совался сюда
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808246
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос вроде делаю в ICS, возвращается код 200, но чтобы забрать данные, какой-то изврат нужно проделать, так и не понял как забрать данные пока.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808280
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде как победа.
С компонентом ICS удалось подгрузить страницу.
То что все мне долго морочили голову страшными словами вылилось буквально в 6 строк кода:

Код: plaintext
1.
2.
3.
4.
5.
6.
HTTPCli1.URL:= 'http://www.yahoo.com';
HTTPCli1.RcvdStream:= TMemoryStream.Create;
HTTPCli1.Get;
HTTPCli1.RcvdStream.Position:=  0 ;
Memo1.Lines.LoadFromStream(HTTPCli1.RcvdStream);
HTTPCli1.RcvdStream.Free;

Спасибо Анатолию, за подсказанные компоненты
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808348
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Главный враг - это сам себе враг.

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808721
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поколупал ics... действительно ntlm отрабатывает первым (тут я ошибся... он у них тоже нативный, как и в синапсах), если не может отработать он, то выполняется basic... всё... в ics больше нет никаких других реализаций ) такая вот шляпа ) при чем написан обсуждаемый код с серьезными упущениями... начиная вот с этого места:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 function  THttpCli.GetNTLMMessage1:  String ;
 begin 
     { Result := FNTLM.GetMessage1(FNTLMHost, FNTLMDomain);            } 
     { it is very common not to send domain and workstation strings on } 
     { the first message                                               } 
    Result := NtlmGetMessage1('', '');
 end ;

все, дальше домен потеряли и он уже не используется (первый параметр):
Код: plaintext
1.
2.
3.
4.
5.
        Result := NtlmGetMessage3('',
                                  Hostname,
                                  FProxyUsername,
                                  FProxyPassword,
                                  FProxyNTLMMsg2Info.Challenge)

т.е. авторизоваться, используя полное пользовательское доменное имя, нельзя... такой вот "добрый вечер"... этот код не будет работать в лесе... FIRMA1.DOMAIN.COM\USER и FIRMA2.DOMAIN.COM\USER одно лицо? ) короче... хорошо там, где нас нет ))

зы: починил SSPI модуль от инди (итого... поддерживаемый список теперь равен: Basic, Digest, Kerberos, NTLM)... файлить господам из атозет лень, зато теперь можно с авторизованной в домене машины ходить без указания юзера, тогда представляться будет текущим или указывать юзера явно с полным доменным именем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
 program  NegotiateDemo;

 {$APPTYPE CONSOLE} 

 uses 
  SysUtils,
  IdAuthentication,
  IdAuthenticationSSPI,
  IdHTTP;

 type 
  TDummyProxy =  class 
   private 
     class   procedure  OnProxyAuthorization( Sender: TObject;
      Authentication : TIdAuthentication;  var  Handled : Boolean );
   end ;

 { TDummyProxy } 

 class   procedure  TDummyProxy.OnProxyAuthorization(Sender: TObject;
  Authentication: TIdAuthentication;  var  Handled: Boolean);
 begin 
   // ну хочет инди эту функцию, хоть и пустую ) 
 end ;

 begin 
   with  TIdHTTP.Create(  nil  )  do 
   try 
    OnProxyAuthorization := TDummyProxy.OnProxyAuthorization;
    ProxyParams.ProxyServer := '...';
    ProxyParams.ProxyPort :=  8080 ;
    ProxyParams.BasicAuthentication := false;
    HTTPOptions := HTTPOptions + [ hoInProcessAuth ];
    WriteLn( Get('http://ya.ru') );
   finally 
    Free
   end ;
 end .

красота )
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35808902
revda.info
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня задачи были очень простые - отправить строчку и принять строчку.
Мне просто интересно, ты Альт мега маньяк какой-то, зачем все это пишешь, в исходниках компонентов ковыряешься, это же время сколько надо ?
Рад что есть такие люди как вы и есть такой форум как этот. Всем спасибо.
Если ты Альт хочешь что-то предложить или сказать что Indy-починеный лучше - напиши, а то я не пойму на самом деле идеалогически какой компонент более правильный.

Спасибо еще раз
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35809055
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идеологически правильнее ICS, но если задачи простые, линейные и потоков мало, то подойдет и Инда. Главное понимать идеологию обеих систем.

--
http://www.podgoretsky.com
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35809082
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
revda.info, да ничего не хочу предложить. Зафиксировал результат для гугля и поиска по форуму. Идеологии Анатолия не про меня... я токарь )
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35809116
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альтrevda.info, да ничего не хочу предложить. Зафиксировал результат для гугля и поиска по форуму. Идеологии Анатолия не про меня... я токарь )
Точишь детали на потоке, или токарь одиночка?
В первом случае Sinapse/Indi, во втором случае ICS

Токарь и Интернет вполне совместимы.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #35809127
Фотография Альт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен ;)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
NTLM Kerberos аудентификация в Indy10
    #36736064
Alex S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альт...
зы: починил SSPI модуль от инди (итого... поддерживаемый список теперь равен: Basic, Digest, Kerberos, NTLM)...
Пытаюсь разобраться с авторизацией (правда не на прокси, а на сервере - но это сути не меняет) с использованием Kerberos. Нарвался на эту ветку. Пробую использовать Indy с IdAuthenticationSSPI.
NTLM работает, но нужен Kerberos. Запретил на web-сервере NTLM. Получаю от сервера:

HTTP/1.1 401 Unauthorized
Content-Length: 1656
Content-Type: text/html
Server: Microsoft-IIS/6.0
WWW-Authenticate: Negotiate
X-Powered-By: ASP.NET
Date: Mon, 12 Jul 2010 11:08:31 GMT


Я так понимаю, этот модуль (IdAuthenticationSSPI) ничего другого, кроме
Authorization: NTLM TlRMTVNTUAABAAAAB7IIogsACwA...
серверу ответить не может (судя по исходникам)
Стандартный от Delphi7 вообще не понимает одну WWW-Authenticate: Negotiate и ожидает WWW-Authenticate: NTLM

Подправленный Альтом IdAuthenticationSSPI.pas (и новые версии отсюда ) пытаются ответить серверу так-же как и при NTLM, видимо благодаря RegisterAuthenticationMethod('Negotiate', TIdSSPINTLMAuthentication); в секции initialization модуля. Но сервер, естественно это не ест и присылает точно такой-же респонд как и при первой итерации.

Поправил метод:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 function  TIdSSPINTLMAuthentication.Authentication:  string ;
 var 
  S:  string ;
 begin 
  Result := '';
   case  FCurrentStep  of 
     1 :
       begin 
         if  Length(Username) =  0   then   begin 
          FSSPIClient.SetCredentialsAsCurrentUser;
         end   else   begin 
          FSSPIClient.SetCredentials(Domain, Username, Password);
         end ;
        Result := 'Negotiate ' + EncodeString( FSSPIClient.InitAndBuildType1Message);   {Do not translate} 
 //        Result := 'NTLM ' + EncodeString( FSSPIClient.InitAndBuildType1Message);  {Do not translate} 
        FNTLMInfo := '';     {Do not translate} 
       end ;
     2 :
       begin 
         if  Length(FNTLMInfo) =  0   then   begin 
          // FNTLMInfo := ReadAuthInfo('NTLM');  {Do not translate} 
          FNTLMInfo := ReadAuthInfo('Negotiate');   {Do not translate} 
          Fetch(FNTLMInfo);
         end ;

         if  Length(FNTLMInfo) =  0   then   begin 
          Reset;
          Abort;
         end ;

        S := DecodeString( FNTLMInfo);
 //        Result := 'NTLM ' + EncodeString( FSSPIClient.UpdateAndBuildType3Message(S));  {Do not translate} 
        Result := 'Negotiate ' + EncodeString( FSSPIClient.UpdateAndBuildType3Message(S));   {Do not translate} 
        FCurrentStep :=  3 ;
       end ;
     3 :  begin 
        FCurrentStep :=  4 ;
       end ;
   end ;
 end ;
т.е. заменил NTLM на Negotiate.
Сервер съел, выдал пакет с 200 OK.
Но "терзают смутные сомненья": а был ли тут Kerberos?
Насколько я понимаю - соединение опять прошло по NTLM. Собственно вопрос: как мне переключится на Kerberos? Или оно само включится (внутри security.dll) как только будут соблюдены какие-нибудь условия?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
NTLM Kerberos аудентификация в Indy10
    #39453145
Nashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex S, ща копаюсь в той же теме.

Менять NTLM на Negotiate в этих трёх местах бессмысленно и вредно, потому как это запись и получение собственно NTLM токенов. У Вас продолжало работать потому, видимо, что не перекомпилировался исправленный Вами модуль при сборке приложения. Чтоб системный модуль перекомпилировался, нужно его ещё компилятору тем или иным способом подсунуть, а так он обычно готовые .dcu из папки lib использует.

Регистрируется этот IdAuthenticationSSPI для ещё и для Negotiate потому, что когда от сервера приходит заголовок WWW-Authenticate со словом Negotiate, это значит что сервер предполагает клиенту некоторую свободу выбора. Клиент может ответить токеном NTLM, и сервер типа станет по NTLM авторизовать. Но токеном Negotiate отвечать не нужно.

А вот готовой реализации клиента Kerberos под Delphi (и уж тем более под Indy) я пока не нашёл.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #39454811
Nashev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм.. Однако, наврал.

На текущий момент, когда у меня заработал Kerberos и Negotiate под Indy 10 через SSPI, я понимаю ситуацию так:

Если сервер предлагает авторизацию методом 'Negotiate', то отвечать нужно токенами со словом 'Negotiate'. Правда, получать такие токены нужно после передачи в AcquireCredentialsHandleW в качестве PackageName тоже имени 'Negotiate' Он будет немножко другой текст токенам делать. Аналогично с Kerberos-ом: пакет нужно указать 'Kerberos', и перед токенами писать 'Kerberos'. В общем, что прислали с сервера - то и продолжаем приписывать.

В отличие от NTLM, Kerberos требует, чтоб ему при первом обращении к InitializeSecurityContextW в InitAndBuildType1Message аргументом pszTargetName передать не nil или пустую строку, а SPN (service principal name, см. https://msdn.microsoft.com/en-us/library/ms677949(v=vs.85).aspx). Его довольно часто можно собрать из URL, взяв хост и приписав к нему, например, 'HTTP/'.

Если Negotiate в аналогичных условиях передать SPN, он может для формирования токенов выбрать алгоритм Kerberos, а если не передать - то точно выберет NTLM ( https://msdn.microsoft.com/en-us/library/ee498156.aspx).

Итого, чтоб всё это завелось, пришлось
1) добавить в конструктор класса аутентификации аргумент MethodName, и прокидывать в него значение из IdHTTP.pas при вызовах после поиска посредством FindAuthClass. При создании объекта пакета в TIndySSPIClient.Create стал вместо конечного наследника с зашитым именем создавать его родительский класс, с передачей в конструктор этого имени метода в качестве имени пакета. В спецификацию обработчика TIdOnSelectAuthorization пришлось тоже добавить имя метода.
1.1) попутно заметил, что вызовы LAuth.AuthParams := лучше б делать перед вызовами метода Authentication у этого объекта, чтоб Authentication мог потенциально опираться на актуальные сведения. Правда, собственно опираться не понадобилось пока.
2) добавить в TIdSSPINTLMAuthentication обработчик SetRequest, и поменять ему в базовом классе AUri со string на TIdURI, чтоб таки передавал хост. А то был только путь на сервере.
3) добавить регистрацию этого класса ещё и для метода MICROSOFT_KERBEROS_NAME (эта константа объявлена в c:\program files (x86)\embarcadero\studio\18.0\source\Indy10\Protocols\IdSSPI.pas)

Затем, уже в косметических целях, повыкидывал NTLM из имён вида TIdSSPINTLMAuthentication (чтоб было, в этом примере, TIdSSPIAuthentication), заменил fNTLMInfo на fSPPIInfo, добавил TIdSSPIAuthentication.SetServicePrincipalName для возможности установки более специфических SPN, поменял местами имена у TSSPIPackage и TCustomSSPIPackage, чтоб Custom было приписано у класса-предка, а не у того класса, экземпляр которого в итоге создаётся, и убил более не нужный класс TSSPINTLMPackage, инкапсулировавший лишь инициализацию родительского класса константой с именем пакета.

В общем, после этого у меня программа авторизовалась в режиме SSO по протоколу Negotiate.

Изменённые файлы прикладываю.
...
Рейтинг: 0 / 0
NTLM Kerberos аудентификация в Indy10
    #39575237
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nashev,

А на какой версии инди основано ваше решение?
никак не могу завести NTLM для Get запросов, примеров в инете маловато, прямо скажем.
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / NTLM Kerberos аудентификация в Indy10
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]