Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AFNetworking 2.0 and HTTP Basic Authentication

Can't find AFHTTPClient on AFNetworking 2.0, to use:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com]];  [client setAuthorizationHeaderWithUsername:@"username" password:@"password"]; 

How it needs to be manage on AFNetworking 2.0?

like image 811
Marckaraujo Avatar asked Sep 30 '13 19:09

Marckaraujo


People also ask

What is HTTP basic authentication and how it works?

HTTP basic authentication is a simple challenge and response mechanism with which a server can request authentication information (a user ID and password) from a client. The client passes the authentication information to the server in an Authorization header. The authentication information is in base-64 encoding.

Does Basic Auth use Base64?

In basic HTTP authentication, a request contains a header field in the form of Authorization: Basic <credentials> , where credentials is the Base64 encoding of ID and password joined by a single colon : . It was originally implemented by Ari Luotonen at CERN in 1993 and defined in the HTTP 1.0 specification in 1996.

Why does Basic Auth use Base64?

The Base64 encoding, most importantly, ensures that the user:pass characters are all part of the ASCII character set and ASCII encoded. A user:pass in HTTP Basic auth is part of the Authorization header-field value. HTTP header values are ASCII (or Extended ASCII) encoded/decoded.

How do I encode for basic authentication?

To encode your credentials, type your username and password into this form, using the format username:password . Your encoded credentials will appear underneath. The encoding script runs in your browser, and none of your credentials are seen or stored by this site.


2 Answers

AFNetworking 2.0 new architecture use serializers for creating requests and parsing responses. In order to set the authorization header, you should first initialize a request operation manager that replaces the AFHTTPClient, create a serializer and then call the dedicated method to set the header.

For example you code would become:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com"]]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; [manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"userName" password:@"password"]; 

You should read the documentation and the migration guide to understand the new concepts that come with the version 2.0 of AFNetworking.

like image 70
Leguman Avatar answered Oct 09 '22 16:10

Leguman


Here is an example of performing basic HTTP authentication with AFNetworking 2.0 using NSURLCredential. The advantage of this approach over using the AFHTTPRequestSerializer setAuthorizationHeaderFieldWithUsername:password: method is that you can automatically store the username and password in the keychain by changing the persistence: parameter of NSURLCredential. (See this answer.)

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  NSURLCredential *credential = [NSURLCredential credentialWithUser:@"user" password:@"passwd" persistence:NSURLCredentialPersistenceNone];  NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"GET" URLString:@"https://httpbin.org/basic-auth/user/passwd" parameters:nil];  AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setCredential:credential]; [operation setResponseSerializer:[AFJSONResponseSerializer alloc]]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {     NSLog(@"Success: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) {     NSLog(@"Failure: %@", error); }]; [manager.operationQueue addOperation:operation]; 
like image 20
titaniumdecoy Avatar answered Oct 09 '22 15:10

titaniumdecoy