2

httpsを介したサーバーでの認証のために、iPhoneアプリケーションで以下のコードを使用しています。

認証は Web ブラウザーで行われていますが、iPhone アプリケーションから認証しようとすると、サーバーの応答コードが 404 になります。以下のコードを使用すると、http 経由で iPhone アプリケーションから正常に認証が行われます。

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 に答える