2016-04-26 4 views
1

Wenn die „Berechtigung“ Headers einer NSMutableURLRequest Einstellung, meine Server-Antwort von Header nicht diesen Header enthält:NSMutableURLRequest Einstellung Autorisierungsheader

[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 

ich die Dokumentation zu lesen empfehlen, das nicht hier einstellen, also wo soll ich Legen Sie den Autorisierungskopf auf der Clientseite fest?

Der Zweck meiner Authorization Header ist entlang meiner Oauth Unterschrift und andere Oauth bezogenen Informationen

Antwort

2

Sie haben Benutzer und Passwort 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

Ich muss einen Authorization-Header senden, um Oauth-Daten an meinen Server zu senden –

+0

@AdamCarter Bitte aktualisieren Sie Ihre Frage so, dass dies spezifisch für OAuth ist. – quellish

2

Die Dokumentation Einstellung empfiehlt es nicht zu senden, weil es in der Regel das ist falscher Weg, es zu tun. Bei den meisten Authentifizierungsmethoden sollten Sie ein tatsächliches NSURLCredential-Objekt in einem Authentifizierungsabschluss-Handler erstellen, und das sollten Sie nur tun, nachdem ein erster Versuch, auf die Ressource zuzugreifen, fehlschlägt.

Leider gibt es keine Unterstützung für OAuth im Betriebssystem. Sie können also nur die Kopfzeile angeben und sicherstellen, dass Sie niemals versehentlich andere Berechtigungsnachweise für diesen Hostnamen hinzufügen (weil das dann der Fall ist) eine gute Chance, dass Ihr Authorization-Header stampfen würde, wenn Sie dies tun).

Verwandte Themen