Je tente d'implémenter l'authentification NTLM par moi-même. Le problème est quand je tente d'envoyer le message de type 1 (NEGOTIATE_MESSAGE) l'application renvoie une exception:Etape par étape Authentification NTLM avec System.Net.Http.HttpClient
Une erreur est survenue lors de l'envoi de la demande.
Et
Exception levée: 'System.Runtime.InteropServices.COMException' dans mscorlib.ni.dll
informations WinRT: La demande de connexion a été refusée
ici est mon code:
byte[] type1Message = new byte[40]
{
// 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
0x4E, 0x54, 0x4C, 0x4D, 0x53, 0x53, 0x50, 0x00,
// Type 1 message
0x01, 0x00, 0x00, 0x00,
// Flags
0x97, 0x82, 0x08, 0xe2,
// Supplied Domain
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Supplied Workstation
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// OS Version Structure
0x0A, 0x00, 0x39, 0x38, //0x00, 0x00, 0x00, 0x00,
// Os version uknown
0x00, 0x00, 0x00, 0x0f
};
var _client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:60475/");
request.Headers.Add("Authorization", "NTLM " + Convert.ToBase64String(type1Message));
using (var response = await _client.SendAsync(request))
{
if (response.IsSuccessStatusCode)
{
return;
}
else
{
}
}
Dans Fiddler je vois que la demande est envoyée et je recevrais la bonne réponse.
tête de demande:
GET http://localhost:60475/ HTTP/1.1
Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw==
Host: localhost:60475
Connection: Keep-Alive
tête de réponse:
HTTP/1.1 401 Unauthorized
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: Negotiate TlRMTVNTUAACAAAAHgAeADgAAAAVgorixp1F6S8OipIAAAAAAAAAAJgAmABWAAAACgA5OAAAAA9EAEUAUwBLAFQATwBQAC0ATQA1ADMAUgBNAE8ASAACAB4ARABFAFMASwBUAE8AUAAtAE0ANQAzAFIATQBPAEgAAQAeAEQARQBTAEsAVABPAFAALQBNADUAMwBSAE0ATwBIAAQAHgBEAEUAUwBLAFQATwBQAC0ATQA1ADMAUgBNAE8ASAADAB4ARABFAFMASwBUAE8AUAAtAE0ANQAzAFIATQBPAEgABwAIALEnZjh/ltIBAAAAAA==
Date: Mon, 06 Mar 2017 13:40:29 GMT
Content-Length: 341
Proxy-Support: Session-Based-Authentication
Ai-je oublié quelque chose?
Merci pour votre aide
Salut, oui je sais. Le problème est que je ne peux pas obtenir la réponse, car l'application se bloque sur 'using (var response = await _client.SendAsync (request))'. –
Je ne l'enverrais pas async, car il n'y a pas d'autres opérations sur lesquelles vous devez travailler en attendant. Je recommanderais le code synchrone. Voulez-vous dire que vous voyez la réponse dans fiddler, mais jamais dans votre code? – markgamache
'Êtes-vous en train de dire que vous voyez la réponse dans fiddler, mais jamais dans votre code?' Oui –