Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.07.15;
Скачать: CL | DM;

Вниз

Авторизация в вебсервисах   Найти похожие ветки 

 
Тимохов Дима ©   (2016-09-12 15:12) [0]

Коллеги!

1. Вебсервисами пользовался. Опыт есть. Брал ставки ИПС с адреса http://www.cbr.ru/secinfo/secinfo.asmx. Но там не было никакой авторизации.
Т.е. с авторизацией в вебсервисах не работал!

2. Сейчас третья сторона срочно требует ответ по стратегии интеграции.
В частности, есть вопросы по авторизации:
<<Так же прошу учесть, что авторизацию я планирую делать по Active Directory.
Это удобно? Если нет, можно сделать простой логин и пароль.>>

3. Вопрос. Как вообще устроена авторизация в вебсервисах? Где-то читал, что вроде как на уровне вебсервисов это не решено.
Или надо авторизацию делать через HTTP, на который опирается вебсервис?

Заранее спасибо!


 
ВладОшин ©   (2016-09-12 16:29) [1]

Не знаю про то ли это
.. тебе wsdl, ты подсовываешь delphi ее, генерируются все необходимые классы и типы... если про то, то у меня так авторизация (delphi 6 )
(судя по http в именах, через http и делается, похоже что)

function GetOrdersPortType(aUserName, aPassword: string; UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): OrdersPortType;

// генерируется ide, что-то правил именно про логин/пароль, не помню что- в основном код уже такой автоматом
const

 defWSDL = "C:\delphi_work\orders\скаченный wsdl.wsdl";
 defURL  = "https://ссыль к ним/ws/orders";
 defSvc  = "Orders";
 defPrt  = "OrdersS";
var
 RIO: THTTPRIO;
begin
 Result := nil;
 if (Addr = "") then
 begin
   if UseWSDL then
     Addr := defWSDL
   else
     Addr := defURL;
 end;
 if HTTPRIO = nil then
   RIO := THTTPRIO.Create(nil)
 else
   RIO := HTTPRIO;

 RIO.HTTPWebNode.UserName := aUserName;
 RIO.HTTPWebNode.Password := aPassword;

 try
   Result := (RIO as OrdersPortType);
   if UseWSDL then
   begin
     RIO.WSDLLocation := Addr;
     RIO.Service := defSvc;
     RIO.Port := defPrt;
   end else
     RIO.URL := Addr;
 finally
   if (Result = nil) and (HTTPRIO = nil) then
     RIO.Free;
 end;
end;


 
Eraser ©   (2016-09-12 17:20) [2]


> Тимохов Дима ©   (12.09.16 15:12) 

в принципе, Indy поддерживает и один и другой тип авторизации.


 
Тимохов Дима ©   (2016-09-12 17:43) [3]


> ВладОшин ©   (12.09.16 16:29) [1]

Посмотрел.
HTTPWebNode - реализован поверх WinINe.
Т.е. я чего хочу сказать - что тут речь, про то, что авторизация идет не на уровне SOAP, а на более низком уровне HTTP. А на уровне SOAP как таковом авторизации нет? Верно?


> Eraser ©   (12.09.16 17:20) [2]
> > Тимохов Дима ©   (12.09.16 15:12) 
> в принципе, Indy поддерживает и один и другой тип авторизации.

Тут, понимаешь, вопрос даже немного теоретический.
Я правильно понимаю, что авторизация идет на уровне HTTP, а не на уровне SOAP как такового?


 
Eraser ©   (2016-09-12 17:53) [4]


> Тимохов Дима ©   (12.09.16 17:43) [3]

насчет NTLM точно сказать не могу, возможно есть разные варианты реализации, но что касается basic и digest, то это именно в стандарте предусмотрено http://www.ietf.org/rfc/rfc2617.txt


 
sniknik ©   (2016-09-12 19:02) [5]

> что авторизацию я планирую делать по Active Directory.
> Это удобно?
это невозможно. авторизация подразумевает логон в систему с логином-паролем, а Active Directory это просто "база" данных по учеткам, и т.д. не система, дополнение, в котором можно посмотреть данные любой учетки (если прав у текущей хватит), но не авторизоваться.

> Как вообще устроена авторизация в вебсервисах?
сервер в винде будет? ну так проверяй результат LogonUser (логин в винду, будет виндовая) на сервере типа: (юзер и домен раздельно, выделяются из прислаонного)
if not LogonUser(PChar(User(ARequestInfo.AuthUsername)), PChar(Domain(ARequestInfo.AuthUsername)), PChar(ARequestInfo.AuthPassword ), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, um) then
begin
   AResponseInfo.AuthRealm   := "Login";
   AResponseInfo.ResponseText:= "test";
   Exit;
end;


 
ВладОшин ©   (2016-09-12 20:39) [6]


> Тимохов Дима ©
на более низком уровне HTTP

видимо так


 
Игорь Шевченко ©   (2016-09-12 22:33) [7]


> с авторизацией в вебсервисах не работал


А в чем проблема ? Вот ты на этом сайте как-то авторизуешься, веб-сервис несильно отличается. Я со своей дилетантской колокольни полагаю, что ты перед началом использования функций, требующих авторизации, передаешь методу авторизации веб-сервиса credentials пользователя, она тебе возвращает некий его идентификатор (cookie), и ты этот идентификатор используешь в запросах к тем функциям, которые требуют авторизованного доступа.


 
Тимохов Дима ©   (2016-09-13 11:37) [8]


> sniknik ©   (12.09.16 19:02) [5]


Ты не мог бы пояснить подробнее о чем речь тут?
Не могу врубиться в то, что сказал...


> > Как вообще устроена авторизация в вебсервисах?
> сервер в винде будет? ну так проверяй результат LogonUser
> (логин в винду, будет виндовая) на сервере типа: (юзер и
> домен раздельно, выделяются из прислаонного)



> Игорь Шевченко ©   (12.09.16 22:33) [7]


Да вроде как на уровне уже вызовов веб-сервиса никаких авторизационных действий нет - методы это просто методы с параметрами. А вот вся авторизация идет ниже. Пока я понял, что на уровне HTTP.


 
iop ©   (2016-09-13 11:54) [9]

это невозможно.

это возможно. иногда.

цайт налабан на асп.нет
проверка подлинности включена доменная.
обработчик вебсервиса лежит в таком каталоге.
сам он допустим ничего не просит кроме прикладных данных, но пост на него не получится если юзер не доменный.


 
iop ©   (2016-09-13 11:55) [10]

но опять таки это никак не связано с "авторизацией в вебсервисах"


 
Тимохов Дима ©   (2016-09-13 12:05) [11]


> iop ©   (13.09.16 11:55) [10]
> но опять таки это никак не связано с "авторизацией в вебсервисах"

Я думаю, что сотрудник с той стороны подразумевает, что в его интранет-сервер, реализующий вебсервис, просто будут добавлены юзера с паролями из Active Directory. И я должен буду, при реализации HTTP-авторизации, передавать юзера и текущий пароль (откуда его брать только не знаю).
Спросил. Жду, чего ответит.


 
iop ©   (2016-09-13 12:12) [12]

они всегда что-то подразумевают. и всегда что-то хотят не обязательно совпадающее с подразумеваемым.

веб сервис на пальцах если - самый обычный веб-ресурс на который могут не пускать анонимно. абсолютно точно так же как и к фотке с котиками.

плюс сам этот веб-ресурс-веб-сервис может иметь параметры логина/пароля в своих сугубо вебсервисных методах.


 
ВладОшин ©   (2016-09-13 14:23) [13]

добавить если, то круче
"послать набор байт на удаленный порт"
не придумали еще )

сервисы-шмервисы.. все равно им на 80(если не переопределено) й порт шлёпнется что-то вроде s : string = "http 1.0 Content-Type: application/x-www-form" и т.п.
откуда прилетит Cookie: твоя сессия ["{B3DA3A91-5CEC-4A52-AE8C-924D00C40E3A}"]
и потом ты неявно всегда postом шлёшь еще один параметр
s : = s + Cookie, подтверждая, что ты это ты.
ну, или 150 параметров )

и все эти soap, библиотеки - просто некое форматирование этой строки s : string
что наглядно можно доказать, формируя текст запроса именно простым s := s +

как то понадобилось на какой то сервер тоже лазить, пишу им узнать как должно быть, какой обмен - какой IN|OUT - ничего не понял в итоге, какие-то версии какой-то библиотеки надо поставить пишут..
В снифере посмотрел обмен, сформировал s := s + и Port.Send(s);
Когда что-то приходит, распарсиваю и  s := s +ЧтоВернулось +  и Port.Send(s);
в общем, обычный TTCPClient вполне работает.
Безусловно, неудобно. Но.. вот прям ща я буду ставить эти библиотеки, php и прочее, ради одного запроса в сутки..


 
Тимохов Дима ©   (2016-09-13 14:36) [14]

В общем решилось в итоге так:
1. Компьютер, где стоит IIS, добавлен в Active Directory.
2. Юзер и пароль будут передаваться в ходе NTLM авторизации.
От меня вообще ничего не требуется. Они все сами настроят.

Всем спасибо)

ЗЫ От вебсервисов вообще, кстати, отказались - будет HTTP GET-запрос с параметрами через URL с возвратом XML.

ЗЗЫ Пока ответа ждал наваял себе тестовый вебсервис и клиента к нему с передачей любых данных (в т.ч. и XML). Клево это в дельфи сделано! Жаль, что раньше не приходилось работать.
С удивлением обнаружил хорошую статью для старта на этом же сайте http://www.delphimaster.ru/articles/web_delphi/index3.html
Может, полезно будет.


 
iop ©   (2016-09-13 14:56) [15]

очень полезно.

особенно с учетом того, что будет гет с xml в респонсе, статья помогает избежать ужасно длинного кода

with CoDomDocument.Create do
begin
 async := false;  
 if load(<get_url>) then ShowMessage(xml);
end



Страницы: 1 вся ветка

Текущий архив: 2018.07.15;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.007 c
15-1473704029
andrd
2016-09-12 21:13
2018.07.15
Вопрос разработчикам Delphi для Android


2-1468059789
Артеменко
2016-07-09 13:23
2018.07.15
Как получить ссылки в DIV?


15-1473682378
Тимохов Дима
2016-09-12 15:12
2018.07.15
Авторизация в вебсервисах


15-1473498366
xayam
2016-09-10 12:06
2018.07.15
Как решить такое уравнение относительно t ?


15-1472410084
ВладОшин
2016-08-28 21:48
2018.07.15
Никто пострелушками не увлекается?