2010-08-18 112 views
17

我正在创建我的第一个iPad应用程序。我有一个Web应用程序,我想对其进行身份验证并从RESTful方式提取数据。iOS:如何使安全的HTTPS连接传递凭证?

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

该站点使用HTTPS进行登录,以便凭证不会以纯文本格式通过Internet传递。

如何创建安全的HTTPS连接来传递凭证?请问这是否记得我已经登录以备将来要求?做这个的最好方式是什么?

回答

13

进一步的更新,2013年10月

虽然在我写这个答案时,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]; 

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

还有这里的iphone一个JSON框架:

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

这对我来说工作得很好,就是简单的用ASIHTTPRequest使用。

+0

我加了一点点解释。该应用程序不是基本的HTTP身份验证。它是在您输入您的凭证的网页上显示的表单。我试图调整它,以便它可以充当RESTful API,我可以对其进行身份验证并查询数据(这些数据将以JSON格式返回)。 – Andrew 2010-08-18 20:03:19

+0

好的,我已经更新了一些更详细的答案。从本质上讲,ASIHTTPRequest应该都很简单。 – JosephH 2010-08-18 20:36:08

+0

因此,一旦我将请求“发布”到/ auth/login,我的iPhone应用程序是否会记住它已通过身份验证?在浏览器中,有Cookie被设置。换句话说,现在我已经过“身份验证”,我可以提出另一个要求您进行身份验证的请求吗? (即GET/users/all) – Andrew 2010-08-19 19:09:34