2012-05-07 15 views

答えて

0

現在、RestKitはNTML認証をサポートしていない、しかし、そのための回避策があります:ログインページで 1、認証と登録認証デリゲートを要求したURLをロードするためにNSURLRequestを使用しています。

- (void) connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    if ([[challenge protectionSpace] authenticationMethod] == NSURLAuthenticationMethodNTLM) 
    { 
     /* This is very, very important to check. Depending on how your security policies are setup, you could lock your user out of his or her account by trying to use the wrong credentials too many times in a row. */ 
     if ([challenge previousFailureCount] > 0) 
     { 
      [[challenge sender] cancelAuthenticationChallenge:challenge]; 

      UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Invalid Credentials" message:@"The credentials you saved for your account are invalid." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
      [alert show]; 
      [alert release]; 
     } 
     else 
     { 
      [[challenge sender] useCredential:[NSURLCredential credentialWithUser:@"someUser" password:@"somePassword" persistence:NSURLCredentialPersistenceForSession] forAuthenticationChallenge:challenge]; 
     } 
    } 
    else 
    { 
     // Do whatever you want here, for educational purposes, I'm just going to cancel the challenge 
     [[challenge sender] cancelAuthenticationChallenge:challenge]; 
    } 
} 

他のページでは、通常、認証なしでRestKitを使用することができます。それはクッキーで認証を続けるので、私はちょうどそれが他の人と連携していないことを確認、SharePointサーバーでそれをテストします。

楽しくお楽しみください! :)

シモンズ:How to do NTLM Authentication in iOS

0

私はRKObjectManagerをサブクラス化し、getObjectsAtPath:

- (void)getObjectsAtPath:(NSString *)path 
      parameters:(NSDictionary *)parameters 
      success:(void (^)(RKObjectRequestOperation *operation, RKMappingResult *mappingResult))success 
      failure:(void (^)(RKObjectRequestOperation *operation, NSError *error))failure 
{ 
    NSParameterAssert(path); 
    RKObjectRequestOperation *operation = [self appropriateObjectRequestOperationWithObject:nil method:RKRequestMethodGET path:path parameters:parameters]; 
    [operation setCompletionBlockWithSuccess:success failure:failure]; 

    //this is the part to handle ntlm authentication, which we arent able to do in RKObjectManager 
    [[operation HTTPRequestOperation] setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) { 
     NSURLCredential *credential = [NSURLCredential credentialWithUser:@"username" password:@"password" persistence:NSURLCredentialPersistenceForSession]; 
     [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge]; 
    }]; 

    [self enqueueObjectRequestOperation:operation]; 
} 
を上書きしなければなりませんでした
関連する問題