views:

629

answers:

3

I am in a situation where I need to send authentication (basic HTTP Authentication) to a server but the server does not send me a challenge first. This has been tracked down to be a duplicate of the wget switch --auth-no-challenge. My problem is, I do not see any way to get NSURL to do this.

I have implemented basic authentication in my NSURLConnection delegate but the -connection: didReceiveAuthenticationChallenge: method is not getting called.

Is there any way to force this call or to embed the authentication information for this strange situation?

A: 

Do u have an authentication set up on the server side to access any portal??

jacob
+2  A: 

I believe you can add the username and password to the NSURL

Example

NSURL *url = [NSURL URLWithString:@"http://username:[email protected]/"];
epatel
+6  A: 

You can add the authorization information to the request manually by adding it to the request header like so:

NSString *authString = [[[NSString stringWithFormat:@"%@:%@",user, password] dataUsingEncoding:NSUTF8StringEncoding] base64Encoding];        
[request setValue:[NSString stringWithFormat:@"Basic %@", authString] forHTTPHeaderField:@"Authorization"];

Where request is your NSMutableURLRequest and user/password are your respective username and password NSString's

I've been using this approach with an API from the iphone where the extra challenge is not being initiated by the server.

paulthenerd
I get an error, when I want to use your solution: NSData does not respond to base64Encoding". Have you added this method yourself?
Tim Büthe
Found NSDataAdditions, including base64Encoding in this answer: http://stackoverflow.com/questions/1417893/encrypted-nsdata-to-nsstring-in-obj-c/1417947#1417947
Tim Büthe
Hi Tim, Yes I have been using NSDataAdditions from the colloquy project
paulthenerd