2009-12-13 9 views
6

Sono in una situazione in cui è necessario inviare l'autenticazione (autenticazione HTTP di base) a un server ma il server non mi invia prima una richiesta. Questo è stato rintracciato per essere un duplicato dell'interruttore di wget --auth-no-challenge. Il mio problema è che non vedo alcun modo per far sì che NSURL lo faccia.Autenticazione NSURL quando il server non presenta una sfida

Ho implementato l'autenticazione di base nel mio delegato NSURLConnection ma il metodo -connection: didReceiveAuthenticationChallenge: non viene richiamato.

C'è un modo per forzare questa chiamata o per incorporare le informazioni di autenticazione per questa strana situazione?

risposta

8

È possibile aggiungere l'informazione di autorizzazione alla richiesta manualmente aggiungendolo al l'intestazione della richiesta in questo modo:

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

Dove richiesta è NSMutableURLRequest e user/password sono il nome utente e la password rispettivi NSString's

Ho utilizzato questo approccio con un'API dall'iPhone in cui la richiesta extra non viene avviata dal server.

+0

Viene visualizzato un errore quando desidero utilizzare la soluzione: NSData non risponde a base64Encoding ". Avete aggiunto questo metodo da soli? –

+0

Found NSDataAdditions, incluso base64Encoding in questa risposta: http://stackoverflow.com/questions/1417893/encrypted-nsdata-to-nsstring-in-obj-c/1417947 # 1417947 –

+0

Ciao Tim, Sì, sto usando NSDataAdditions dal progetto colloquio – paulthenerd

9

io credo che si possa aggiungere il nome utente e la password al NSURL

Esempio

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

Pensa a sfuggire il nome utente e la password. Nessuno di loro dovrebbe f.e. contenere un carattere '@'. – SimonSimCity

0

Appena incappato in questo post, ed evento anche se sono passati alcuni anni ho appena implementato questa funzionalità in iOS7 per la mia app utilizzando la codifica base64 incorporata senza librerie di terze parti.

Per quello che vale;

NSString *credentials = [NSString stringWithFormat:@"%@:%@", username, password]; 
NSData* credentialsData = [NSData dataWithBytes:[credentials UTF8String] length:strlen([credentials UTF8String])]; 
credentials = [credentialsData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; 
NSString *authStr = [NSString stringWithFormat:@"Basic %@", credentials]; 
[urlRequest setValue:authStr forHTTPHeaderField:@"Authorization"]; 
Problemi correlati