代码之家  ›  专栏  ›  技术社区  ›  Andrew

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

  •  17
  • Andrew  · 技术社区  · 14 年前

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

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

    该网站使用HTTPS进行登录,这样就不会在Internet上以纯文本形式传递凭据。

    如何建立安全的HTTPS连接以传递凭据?这会记得我登录以后的请求吗?最好的方法是什么?

    1 回复  |  直到 11 年前
        1
  •  13
  •   Community CDub    8 年前

    进一步更新,2013年10月

    虽然在我写这个答案的时候,asihttpRequest得到了广泛的支持,但现在已经不是这样了。不建议用于新项目-而是直接使用nsurlconnection或使用afnetworking。

    有了AFNetworking, [httpClient setAuthorizationHeaderWithUsername:username password:password]; 用于HTTP身份验证和创建Post样式表单的方法同样简单-请参见 AFNetworking Post Request 为此。


    原始答案:

    许多人使用asihttpRequest类来处理iPhone/iPad上的http&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。

    如果您添加更多关于身份验证方案如何工作的详细信息,我可以更具体一些。

    更新

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

    [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一起使用。