Alexi Groove Alexi Groove - 3 months ago 11
iOS Question

NSURLConnection and Basic HTTP Authentication in iOS

I need to invoke an initial

GET HTTP request
with Basic
Authentication
. This would be the first time the request is sent to the server and I already have the
username & password
so there's no need for a challenge from the server for authorization.

First question:


  1. Does
    NSURLConnection
    have to be set as synchronous to do Basic Auth? According to the answer on this post, it seems that you can't do Basic Auth if you opt for the async route.

  2. Anyone know of any some sample code that illustrates Basic Auth on a
    GET request
    without the need for a challenge response? Apple's documentation shows an example but only after the server has issued the challenge request to the client.



I'm kind of new the networking portion of the SDK and I'm not sure which of the other classes I should use to get this working. (I see the
NSURLCredential
class but it seems that it is used only with
NSURLAuthenticationChallenge
after the client has requested for an authorized resource from the server).

Answer

I'm using an asynchronous connection with MGTwitterEngine and it sets the authorization in the NSMutableURLRequest (theRequest) like so:

NSString *authStr = [NSString stringWithFormat:@"%@:%@", [self username], [self password]];
NSData *authData = [authStr dataUsingEncoding:NSASCIIStringEncoding];
NSString *authValue = [NSString stringWithFormat:@"Basic %@", [authData base64EncodingWithLineLength:80]];
[theRequest setValue:authValue forHTTPHeaderField:@"Authorization"];

I don't believe this method requires going through the challenge loop but I could be wrong