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.
Vous devez vous connecter pour publier un commentaire.
Créer une classe Digérer.cs
Maintenant dans votre application, vous pouvez utiliser le code suivant:
Cet article de 4GuysFromRolla semble être ce que vous cherchez:
http://www.4guysfromrolla.com/articles/102605-1.aspx
Je suis actuellement en observant le même problème, si le serveur web, je vais tester cela sur mon propre. Les journaux du serveur spectacle:
J'ai essayé de supprimer les arguments de l'URL (comme cela semble être ce qui est différent), mais l'erreur s'est produite encore tout comme avant.
Ma conclusion est que les arguments de l'URL doivent être inclus dans le recueil de hachage et de la
HttpWebRequest
est pour une raison de le retirer.