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

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

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

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

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

17
задан Andrew 18 August 2010 в 20:01
поделиться

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];

do :

  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

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

Здесь есть структура JSON для iphone:

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

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

13
ответ дан 30 November 2019 в 14:24
поделиться