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很简单。