Кто-нибудь знает, как проверять веб-сайты, использующие дайджест-аутентификацию http?
Я использую такой код:
var request = (HttpWebRequest)WebRequest.Create(SiteUrl);
request.Credentials=new NetworkCredential(Login, Password)
Я могу получить доступ к главной странице сайта, но когда я пытаюсь перейти на другие страницы (используя другой запрос с теми же учетными данными), я получаю ошибку «HTTP / 1.1 400 Bad Request».
Я использовал Fiddler для сравнения запросов моего приложения на C # с запросами Mozilla Firefox.
2 URL-адреса, к которым я пытаюсь получить доступ:
https://mysiteurl/forum/index.php
https://mysiteurl/forum/viewforum.php?f=4&sid=d104363e563968b4e4c07e04f4a15203
Вот 2 запроса () моего приложения на 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"
И вот что Firefox отправляет на сервер:
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"
Так что в моем приложении у меня есть разные значения в поле «nonce», в то время как в Firefox это поле одинаково. С другой стороны, у меня есть те же значения в поле «nc», в то время как Firefox увеличивает это поле.
Также, когда мое приложение пытается получить доступ к страницам сайта в Fiddler, я вижу, что оно всегда получает ответ «Требуется авторизация HTTP / 1.1 401», тогда как Firefox авторизуется только один раз. Я пытался установить request.PreAuthenticate = true; но, похоже, ничего не поделаешь ...
Мой вопрос: как правильно реализовать дайджест-проверку подлинности с использованием C #? Существуют ли какие-либо стандартные методы или я должен делать это с нуля? Заранее спасибо.