Подтвердить что ты не робот

IOS: Как сделать безопасное соединение HTTPS для передачи учетных данных?

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

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

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

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

4b9b3361

Ответ 1

Дальнейшее обновление, октябрь 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.

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

Обновление

На основе обновления для эмуляции формы 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.