2010-08-18 5 views
17

Я создаю свое первое приложение для iPad. У меня есть веб-приложение, которое я хотел бы аутентифицировать и извлекать данные с помощью RESTful.iOS: Как сделать безопасное соединение HTTPS для передачи учетных данных?

Если вы откроете URL-адрес в браузере (https://myapp.com/auth/login), вы получите форму для ввода своего имени пользователя и пароля. Я думал, что могу установить учетные данные для входа в почтовые данные запроса и отправить данные.

Сайт использует HTTPS для входа, чтобы учетные данные не были переданы простым текстом через Интернет.

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

ответ

13

Дальнейшее обновление, октябрь 2013

Хотя в то время я писал этот ответ, ASIHTTPRequest поддерживали широко поддерживается, это уже не так. Это не рекомендуется для новых проектов - вместо этого напрямую используйте NSURLConnection или используйте AFNetworking.

С AFNetworking существует метод [httpClient setAuthorizationHeaderWithUsername:username password:password]; для проверки подлинности HTTP и создание формы стиля POST одинаково легко - см. AFNetworking Post Request.


Оригинальный ответ:

Многие люди используют класс ASIHTTPRequest, чтобы иметь дело с HTTP & HTTPS на iPhone/IPad, так как он имеет много полезных функций, которые трудно или времени достичь с помощью встроенного в классах:

http://allseeing-i.com/ASIHTTPRequest/

Начиная на простейшем уровне вы бы начать с чем-то вроде:

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

    [request startSynchronous]; 
    NSError *error = [request error]; 
    if (!error) { 
     NSString *response = [request responseString]; 
     NSLog(@"response = %@", response); 
    } 

Если вы используете HTTP-аутентификацию, ASIHTTPRequest автоматически предложит пользователю ввести имя пользователя и пароль.

Если вы используете другую форму аутентификации, вам, вероятно, потребуется запросить имя пользователя и пароль у пользователя самостоятельно и представить их как значение POST или пользовательский заголовок HTTP, а затем ответ может включать в себя токен в ответ JSON или XML, или он может установить cookie.

Если вы добавите более подробную информацию о том, как работает схема аутентификации, я могу быть более конкретным.

Update

на основе обновления, чтобы эмулировать форму POST вы просто нужно добавить строки, как:

[request addPostValue:usernameString forKey:@"username"]; 
[request addPostValue:passwordString forKey:@"password"]; 

Вы также должны изменить способ создать запрос вместо:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

сделать:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

(Я также забыл упомянуть об этом выше, есть код, который я поставил ранее, использует синхронный запрос, поэтому вы хотите заменить его асинхронным, чтобы избежать блокировки пользовательского интерфейса, как только вы доказали, что он работает.)

Там в рамки JSON для Iphone здесь:

http://code.google.com/p/json-framework/

, который работает хорошо для меня и прост в использовании с ASIHTTPRequest.

+0

Я добавил немного больше объяснения. Приложение не является базовой HTTP-аутентификацией. Это форма, отображаемая на веб-странице, в которой вы вводите свои учетные данные. Я пытаюсь настроить его, чтобы он мог выступать в качестве RESTful API, который я могу аутентифицировать и запрашивать данные (которые будут возвращены в формате JSON). – Andrew

+0

Хорошо, я обновил свой ответ немного подробнее. По существу, все должно быть довольно просто с ASIHTTPRequest. – JosephH

+0

Итак, как только я «отправил» запрос/auth/login, мое приложение iPhone запомнит, что оно аутентифицировано? В браузере есть файлы cookie, которые устанавливаются. Другими словами, теперь, когда я «аутентифицирован», могу ли я сделать другой запрос, требующий, чтобы вы были аутентифицированы? (т. е. GET/users/all) – Andrew

Смежные вопросы