2

我在 iPhone 应用程序中使用以下代码通过 https 与服务器进行身份验证。

身份验证发生在 Web 浏览器上,但是当我尝试从 iPhone 应用程序进行身份验证时,服务器响应代码为 404。使用以下代码,身份验证从 iPhone 应用程序通过 http 成功进行。

所以我想知道 iOS 5 中的 https 身份验证是否有任何重大变化。

我的代码如下。

-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
   if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
   {
       if ([challenge.protectionSpace.host isEqualToString:MY_PROTECTION_SPACE_HOST])
       {
           [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
       }

       [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
   }
   else if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodHTTPBasic])
   {
      if ([challenge previousFailureCount] == 0)
      {
          NSURLCredential *newCredential;

          newCredential = [NSURLCredential credentialWithUser:@"username"
                        password:@"password"
                        persistence:NSURLCredentialPersistenceForSession];

          [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
      }
      else
      {
          [[challenge sender] cancelAuthenticationChallenge:challenge];


          NSLog (@"failed authentication");

         
      }
  }
}

提前致谢。

4

1 回答 1

2

对于通过 https 进行的身份验证,您可以尝试此代码。有关更多详细信息,您可以从http://as.wiley.com/WileyCDA/WileyTitle/productCd-1119961327,descCd-DOWNLOAD.html下载源代码并查看其中的 iHotelApp。

self.networkQueue = [ASINetworkQueue queue];
  [self.networkQueue setMaxConcurrentOperationCount:6];
  [self.networkQueue setDelegate:self];
  [self.networkQueue go];

  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:LOGIN_URL]];

    [request setUsername:loginName];
    [request setPassword:password]; 

  [request setDelegate:self];

    [request setDidFinishSelector:@selector(loginDone:)];
    [request setDidFailSelector:@selector(loginFailed:)];   

    [self.networkQueue addOperation:request];
于 2012-07-11T20:16:25.467 回答