iOS:如何建立安全的HTTPS连接以传递凭据?

时间:2010-08-18 04:57:58

标签: iphone objective-c ipad ios

我正在创建我的第一个iPad应用程序。我有一个Web应用程序,我想要以RESTful方式进行身份验证并从中提取数据。

如果您在浏览器中打开网址(https://myapp.com/auth/login),您将收到一个表单,用于输入您的用户名和密码。我以为我可以在请求的发布数据中设置登录凭据并提交数据。

该网站使用HTTPS进行登录,因此凭据不会通过互联网以纯文本形式传递。

如何建立安全的HTTPS连接以传递凭据?请记住我是否已登录以备将来使用?这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:13)

2013年10月进一步更新

虽然当时我写了这个答案,ASIHTTPRequest得到了广泛的支持,但现在不再是这样了。不建议用于新项目 - 而是直接使用NSURLConnection,或使用AFNetworking。

使用AFNetworking,有一种用于http身份验证的[httpClient setAuthorizationHeaderWithUsername:username password:password];方法,创建一个POST样式表格同样容易 - 请参阅AFNetworking Post Request


原始回答:

很多人使用ASIHTTPRequest类来处理http&在iPhone / iPad上使用https,因为它具有很多有用的功能,使用内置类很难或耗时:

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

(我也忘记在上面提到它,我之前提到的代码是使用同步请求,所以你想用异步代码替换它,以避免在你证明它正在工作时阻止它。)

这里有一个iphone的JSON框架:

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

适用于我,并且易于使用ASIHTTPRequest。