Home

воскресенье, 29 ноября 2009 г.

Basic http authentication with webservices core

На днях опять столкнулся с необходимостью работы из Cocoa с вебсервисом, защищенным паролем. Загуглил на эту тему и понял, ничего не изменилось.
Ситуация по прежнему характеризуется как "Performing the basic HTTP authentication is still an absolute pain in the ass, but it is possible nonetheless"
Решения сводятся к двум путям:
Ссылке на статью в Developer Connection и статье некого дятла, который на двух страницах кода спускается на уровень CFNetwork и вручную инициирует соединение.
На самом деле все проще.



Если глянуть в википедию, то станет понятно, что весь процесс авторизации сводится к добавлению в заголовок запроса всего одной строки

Authorization: Basic bmFnaW9zOm11bmljaA==

где странный набор зашифрованных символов является base64 энкодингом конкатенации
base64encode(username+":"+password)

Собственно это делается просто, в  методе createInvocationRef класса wsGeneratedObject
сказать


NSDictionary* headers = [self copyHeaderDictionary:[NSArray arrayWithObjects:@"", @"Basic bmFnaW9zOm11bmljaA==", nil] extraKeys:[NSArray arrayWithObjects:@"SOAPAction", @"Authorization", nil]] ;
WSMethodInvocationSetProperty(ref, kWSHTTPExtraHeaders, headers);
[headers release];


Ой.

0 коммент.:

Отправить комментарий