2016-04-26 1 views
1

Lorsque vous définissez l'en-tête « Autorisation » d'un NSMutableURLRequest, la réponse de mon serveur d'en-têtes ne comprend pas cet en-tête:autorisation de mise en NSMutableURLRequest tête

[Host] => myhost.com 
[Content-Type] => application/x-www-form-urlencoded 
[Connection] => keep-alive 
[Accept] => */* 
[User-Agent] => MyApp/1 CFNetwork/758.3.15 Darwin/15.4.0 
[Content-Length] => 327 
[Accept-Language] => en-gb 
[Accept-Encoding] => gzip, deflate 

J'ai lu la documentation suggéré de ne pas mettre cela ici, alors où dois-je définir l'en-tête d'autorisation sur le côté client?

Le but de mon tête Authorization est d'envoyer le long de ma signature OAuth et d'autres informations relatives OAuth

Répondre

2

Vous avez utilisateur et mot de passe API

// Create the request 
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:0]; 

// New Create the connection 
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 

NSURLSession *session = [NSURLSession sharedSession];//sessionWithConfiguration:defaultConfigObject delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 

NSURLCredential *creds = [NSURLCredential credentialWithUser:self.username password:self.password persistence:NSURLCredentialPersistenceForSession]; 

NSString *authStr = [NSString stringWithFormat:@"%@:%@",self.username,self.password];// @"username:password"; 

NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; 

NSString *authValue = [NSString stringWithFormat: @"Basic %@",[authData base64EncodedStringWithOptions:0]]; 

// Part Important 
[request setValue:authValue forHTTPHeaderField:@"Authorization"]; 

// Or Token 
NSString *authValueToken = @"OAuth UElJRFER1A5zcGkyW16T0"; 
[request setValue:authValueToken forHTTPHeaderField:@"AuthenticatedToken"];// Authenticated API 


NSString *postLength = [NSString stringWithFormat:@"327"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 

NSString *postLength = [NSString stringWithFormat:@"application/x-www-form-urlencoded"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Type"]; 

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request  
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
      receivedData = [NSMutableData data]; 
      NSString* responseData = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding]; 
      NSLog(@"%@",responseData); 
      if (error) { 
        [self handleError: error]; 
      } 
}]; 

[dataTask resume]; // <- important 

NSLog(@"Header Fields Request--->> %@",request.allHTTPHeaderFields); 
+0

Je dois envoyer un en-tête d'autorisation pour envoyer des données Oauth à mon serveur –

+0

@AdamCarter Veuillez mettre à jour votre question pour indiquer qu'elle est spécifique à OAuth. – quellish

2

La documentation recommande pas de mise car il est généralement le mauvaise façon de le faire. Pour la plupart des authentifications, vous devez créer un objet NSURLCredential réel dans un gestionnaire d'achèvement d'authentification, et vous ne devriez le faire qu'après une tentative initiale d'accès à la ressource échoue. Malheureusement, AFAIK, il n'y a pas de support pour OAuth dans l'OS, donc la seule chose que vous pouvez faire est de spécifier l'en-tête pour commencer, et assurez-vous que vous n'ajoutez jamais d'autres informations d'identification pour ce nom d'hôte (parce que une chance décente que votre entête d'autorisation serait piétiné si vous le faites).