iOS:如何使安全的HTTPS连接传递凭据?

我正在创build我的第一个iPad应用程序。 我有一个Web应用程序,我想对其进行身份validation,并以REST方式提取数据。

如果您在浏览器中打开url( https://myapp.com/auth/login ),您将会得到一个表单来input您的用户名和密码。 我想我可以在请求的发布数据中设置login凭据并提交数据。

该站点使用HTTPS进行login,因此凭据不会以纯文本forms通过Internet传递。

我怎样才能使一个安全的HTTPS连接传递凭据? 请记住我已经login了以后的请求吗? 做这个的最好方式是什么?

进一步更新,2013年10月

虽然在我写这个答案的时候,ASIHTTPRequest得到了广泛的支持,但情况已经不复存在了。 不推荐用于新项目 – 直接使用NSURLConnection,或使用AFNetworking。

使用AFNetworking,有一个[httpClient setAuthorizationHeaderWithUsername:username password:password]; 方法进行http身份validation,并创build一个POST样式表单同样容易 – 请参阅AFNetworking Post Request 。


原始答案:

很多人使用ASIHTTPRequest类来处理iPhone / iPad上的http和https,因为它有很多有用的function,用内置的类实现起来很困难或耗时:

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身份validation,ASIHTTPRequest将自动提示用户input用户名和密码。

如果您使用其他forms的身份validation,则可能需要自己向用户请求用户名和密码,并将其作为POST值或自定义http头提交,然后响应可能包含JSON中的令牌或XML响应,或者它可以设置一个cookie。

如果您添加更多关于authenticationscheme如何工作的细节,我可以更具体一些。

更新

基于更新,模拟一个POST表单,你只需要添加如下行:

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

您还需要更改创build请求的方式,而不是:

  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 

做:

  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

(我也忘了在上面提到,我之前提出的代码是使用了一个同步请求,所以你想用asynchronous代码replace它,以避免在你certificate它正在工作时阻塞UI。)

这里有一个用于iPhone的JSON框架:

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

这对我来说效果很好,而且使用ASIHTTPRequest很简单。