Mettre en œuvre l'authentification Digest via HttpWebRequest en C#

Personne ne sait comment l'écran de gratter des sites web qui utilisent l'authentification http digest?
J'ai utiliser le code comme ceci:

var request = (HttpWebRequest)WebRequest.Create(SiteUrl);
request.Credentials=new NetworkCredential(Login, Password)

Je suis en mesure d'accéder au site de la page d'accueil, mais quand j'essaie de surf à toutes les autres pages (à l'aide d'une autre demande avec les mêmes informations d'identification), j'ai "HTTP/1.1 400 Bad Request" erreur.

J'ai utilisé un violon pour comparer les demandes de mon application en C# avec Mozilla Firefox demandes.

2 URLs que j'essaie d'accès sont:
https://mysiteurl/forum/index.php
https://mysiteurl/forum/viewforum.php?f=4&sid=d104363e563968b4e4c07e04f4a15203

Voici 2 demandes () de mon application en C#:

Authorization: Digest username="xxx",realm="abc",nonce="NXa26+NjBAA=747dfd1776c9d585bd388377ef3160f1ff265429",uri="/forum/index.php",algorithm="MD5",cnonce="89179bf17dd27785aa1c88ad976817c9",nc=00000001,qop="auth",response="3088821620d9cbbf71e775fddbacfb6d"

Authorization: Digest username="xxx",realm="abc",nonce="1h7T6+NjBAA=4fed4d804d0edcb54bf4c2f912246330d96afa76",uri="/forum/viewforum.php",algorithm="MD5",cnonce="bb990b0516a371549401c0289fbacc7c",nc=00000001,qop="auth",response="1ddb95a45fd7ea8dbefd37a2db705e3a"

Et c'est ce que Firefox envoi vers le serveur:

Authorization: Digest username="xxx", realm="abc", nonce="T9ICNeRjBAA=4fbb28d42db044e182116ac27176e81d067a313c", uri="/forum/", algorithm=MD5, response="33f29dcc5d70b61be18eaddfca9bd601", qop=auth, nc=00000001, cnonce="ab96bbe39d8d776d"
Authorization: Digest username="xxx", realm="abc", nonce="T9ICNeRjBAA=4fbb28d42db044e182116ac27176e81d067a313c", uri="/forum/viewforum.php?f=4&sid=d104363e563968b4e4c07e04f4a15203", algorithm=MD5, response="a996dae9368a79d49f2f29ea7a327cd5", qop=auth, nc=00000002, cnonce="e233ae90908860e1"

Donc, dans mon application j'ai des valeurs différentes dans le "nonce" champ, tandis que dans Firefox, ce champ est le même. Sur l'autre main, j'ai les mêmes valeurs dans "nc" champ alors que Firefox incréments de ce champ.

Aussi quand mon application tente d'accéder à des pages du site dans un violon, je peux voir qu'il obtient toujours la réponse "HTTP/1.1 401 Authorization required", tandis que Firefox autorise qu'une seule fois. J'ai essayé de mettre le demande.PreAuthenticate = vrai; mais il ne semble pas avoir d'effet...

Ma question est: comment mettre en œuvre correctement l'authentification digest à l'aide de C#? Existe-il des méthodes standard ou dois-je le faire à partir de zéro? Merci à l'avance.

InformationsquelleAutor | 2009-02-27