Autenticação HTTP cabeçalhos de autenticação do windows IIS
-
06-07-2019 - |
Pergunta
Eu tenho um site hospedado no IIS com autenticação do Windows. Eu estou tentando acessá-lo em um dos minha aplicação web iPhone. Atualmente estou usando este código, mas ele não está funcionando.
NSString * authString = [[[NSString stringWithFormat: @ "% @:% @", @ "myusername", @ "mypassword"] dataUsingEncoding: NSUTF8StringEncoding] base64Encoding];
authString = [NSString stringWithFormat: @"Basic %@", authString];
**[requestObj setValue:authString forHTTPHeaderField:@"Authorization"];**
meu aplicativo web está hospedado com a autenticação do Windows. mas aqui eu estou usando básico. pode qualquer um pós qual é a correta http cabeçalho para ele.
Obrigado ..
Solução
Eu acho que a principal diferença é que você precisa especificar o domínio que você está autenticando contra, bem como o nome de usuário e senha. Algo como isso deve funcionar. Eu usei uma solicitação síncrona para brevidade, idealmente você deve usar um ASINetworkQueue ou NSOperationQueue para executar a solicitação.
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]);
}
Eu não tenho acesso a um servidor Windows para testar isso, mas eu testei NTLM no passado, então ele deve funcionar ...:)
Outras dicas
A autenticação do Windows (NTLM) não é tão simples como a autenticação básica. NTLM requer mais do que um webrequest para negociar a segurança de modo que não é estático cabeçalho HTTP que você pode enviar para o login.
Você pode usar o terceiro ASIHTTPRequest biblioteca para executar NTLM sobre HTTP autenticação.
Eu não estou 100% de certeza que ele suporta a autenticação NTLM, mas você tem investigado o método connection:didReceiveAuthenticationChallenge
na NSURLConnection?