iOS: как создать безопасное соединение HTTPS для передачи учетных данных? - PullRequest
17 голосов
/ 18 августа 2010

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

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

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

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

1 Ответ

13 голосов
/ 18 августа 2010

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

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