Objective-C и упреждающая аутентификация - PullRequest
4 голосов
/ 16 июля 2011

Я пытаюсь получить данные из WebService для моего приложения Ipad.

Для этого я использую NSURLConnection с NSMutableURLRequest.

Веб-службы публикуются в Apache-Coyote 1.1 с Preemptive Basic Authentication, но я не знаю, как отправить свои учетные данные из Objective-C.

Кто-нибудь знает, как я могу установить свой логин / пароль в Objective-C для входа в систему клиентов с помощью системы упреждающей аутентификации Apache?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 июля 2011

РЕДАКТИРОВАТЬ:

Для того, чтобы установить кредиты самостоятельно, вы должны быть в состоянии base64 кодировать имя пользователя и пароль и установить соответствующий заголовок.Мэтт Галлахер из «Какао с любовью» написал отличный пост на о том, как легко добавить категорию к NSData.

NSString* username = @"username";
NSString* password = @"password";

NSString* encodedUsername = [[username dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];
NSString* encodedPassword = [[password dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];

NSURL* url = [NSURL URLWithString:@"http://yourUrl.com/"];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
NSString* headerValue = [NSString stringWithFormat:@"Basic %@:%@", encodedUsername, encodedPassowrd];
[request addValue:@"Authorization" forHTTPHeaderField:headerValue];

[NSURLConnection connectionWithRequest:request delegate:self];

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

0 голосов
/ 16 июля 2011

Рассмотрите возможность использования инфраструктуры ASIHTTPRequest, , которая упрощает упреждающие запросы базовой аутентификации :

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com/top_secret/"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setAuthenticationScheme:(NSString *)kCFHTTPAuthenticationSchemeBasic]; /** preemptively present credentials **/
[request setUsername:@"username"];
[request setPassword:@"password"];
[request startSynchronous];
NSError *error = [request error];
if (!error)
    NSString *response = [request responseString];

И, да, вы определенно хотите выполнить обычную аутентификацию по SSL (т.е. через какой-то https://... URL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...