.NET WebClient首先发送没有身份验证的请求

Ale*_*vic 8 .net c# security webclient digest-authentication

我正在使用Asp.net web api构建Web服务,我必须从AXIS IP Camera获取图像.但是,摄像机使用摘要式身份验证.所以我的C#代码看起来像这样:

            WebClient webClient = new WebClient();
            webClient.UseDefaultCredentials = true;
            webClient.Credentials = new NetworkCredential("***", "***");
            byte[] imageStream = webClient.DownloadData("http://192.168.0.90/axis-cgi/jpg/image.cgi");
Run Code Online (Sandbox Code Playgroud)

这一切都有效,但在查看Fiddler时,我发现客户端在没有身份验证的情况下发送了一个请求,并返回401错误.之后,它发送具有摘要安全性的那个.

我在这里找到了一个带有手动凭证注入的解决方案:

http://kristofmattei.be/2013/02/20/webclient-not-sending-credentials-heres-why/

但这看起来不错.它使用基本身份验证,我真的不想要,看起来有点不专业.

有没有办法立即发送签名的请求或这是如何工作的,因为我注意到相机在第一个请求中返回nonce?

arg*_*gaz 7

您无法避免第一个匿名请求,因为WebClient必须根据他获得的401响应来确定使用哪种身份验证方案,它可能是基本的,摘要等...请参阅该问题.

使用摘要,无论如何都无法避免2个请求,因为第一个401响应包含一个nonce(客户端身份验证请求所需的值),请参阅摘要访问身份验证,Wikipedia.

如果是基本身份验证,则可以通过使用凭据手动设置所需的标头来避免第一个请求.