2009-05-06 5 views
0

J'ai un site Web hébergé sur IIS avec l'authentification Windows. J'essaie d'y accéder dans l'une de mes applications web iPhone. Actuellement, j'utilise ce code, mais cela ne fonctionne pas.En-têtes d'authentification HTTP pour l'authentification des fenêtres IIS

NSString * authString = [[[NSString stringWithFormat: @ "% @: @%", @ "myusername", @ "mypassword"] dataUsingEncoding: NSUTF8StringEncoding] base64Encoding];

authString = [NSString stringWithFormat: @"Basic %@", authString]; 

**[requestObj setValue:authString forHTTPHeaderField:@"Authorization"];** 

mon application Web est hébergée avec l'authentification Windows. mais ici j'utilise basique. Quelqu'un peut-il poster quel est l'en-tête http correct pour cela.

Merci ..

Répondre

4

Je pense que la principale différence est que vous devez spécifier le domaine contre lequel vous vous authentifiez ainsi que le nom d'utilisateur et le mot de passe. Quelque chose comme ça devrait fonctionner. J'ai utilisé une demande synchrone pour la brièveté, idéalement, vous devez utiliser un ASINetworkQueue ou NSOperationQueue pour effectuer la demande.

NSString *username = @"test"; 
NSString *password = @"test"; 
NSString *domain = @"test"; 
NSURL *url = [NSURL URLWithString:@"http://myurl"]; 
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease]; 
[request setUseSessionPersistence:YES]; 
[request setUsername:username]; 
[request setPassword:password]; 
[request setDomain:domain]; 
[request start]; 
if ([request error]) { 
    if ([[request error] code] == ASIAuthenticationErrorType) { 
     //Authentication failed 
    } 
} else { 
    NSLog([request responseString]); 
} 

Je n'ai pas accès à un serveur Windows pour tester, mais je l'ai testé NTLM dans le passé il devrait fonctionner ... :)

+0

Merci Pokeb ... Ça marche bien ... ça en prend beaucoup .... mais j'ai besoin de lire une vidéo de Windows Server. Mais MPMovieplayerController ne supporte aucun mécanisme d'authentification. Que faire??? – nbojja

+0

MPMoviePlayerController prend uniquement en charge le chargement des supports via les méthodes NSURL * standard. Le mieux est d'ajouter d'autres types d'authentification pris en charge sur le serveur, mais en dernier recours, vous pouvez créer un serveur HTTP de bouclage s'exécutant sur le périphérique pour proxy les données entre NSURLConnection et le serveur authentifié NTLM. – rpetrich

+0

L'exemple n'imprimera aucune sortie dans le journal car il est asynchrone - lorsque '[request responseString]' est évalué, il y a de fortes chances que la requête soit toujours en cours de traitement. Cependant, le reste semble fonctionner correctement. – Ant

1

authentification Windows (NTLM) n'est pas aussi simple que l'authentification de base. NTLM requiert plus d'un webrequest pour négocier la sécurité afin qu'il n'y ait pas un en-tête HTTP statique que vous pouvez envoyer pour vous connecter.

+0

avez-vous une idée de résoudre le problème ... – nbojja

+0

Passer à l'authentification de base serait la solution la plus simple. – David

+0

mais mon application d'entreprise est déjà hébergé un ... je ne peux pas chage le type d'authentification ... – nbojja

0

Vous pouvez utiliser le tiers ASIHTTPRequest library pour effectuer l'authentification NTLM sur HTTP.

+0

Salut ... Pouvez-vous me poster du code comment faire NTLM auth avec ASIHTTPRequest. merci .. – nbojja

0

Je ne suis pas sûr à 100% qu'il supporte l'authentification NTLM mais avez-vous étudié la méthode connection:didReceiveAuthenticationChallenge sur NSUrlConnection?

+0

Oui ... J'ai vérifié la méthode didReceivedAuthenticationChallenge. ça fonctionne bien pour télécharger des données. mais j'essaye de jouer une vidéo. avec MPMoviePlayerController, cela ne fonctionne pas bien. – nbojja

Questions connexes