【发布时间】:2013-06-06 03:21:08
【问题描述】:
我正在使用 Asp.net Web api 构建 Web 服务,并且我必须从 AXIS IP 摄像机获取图像。但是,相机使用 Digest 身份验证。所以我的 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");
这一切都可以,但是在查看 Fiddler 时,我发现客户端发送一个请求没有经过身份验证,并返回 401 错误。之后,它会发送具有摘要安全性的邮件。
我在这里找到了手动凭据注入的解决方案:
http://kristofmattei.be/2013/02/20/webclient-not-sending-credentials-heres-why/
但这看起来不对。它使用基本身份验证,我真的不想要,而且看起来有点不专业。
有什么方法可以立即发送已签名的请求,还是因为我注意到相机在第一个请求中返回了随机数,所以这是这样工作的?
【问题讨论】:
-
嗯,那个链接是相似的,我想你是在告诉它使用默认凭据,然后设置显式凭据,尝试先将其设置为 false,然后看看它是否有效
-
在两个建议之后没有改变。
-
如果您从非 Web 应用程序(例如控制台应用程序定位)运行相同的代码,这是否有效?我的建议是,由于 Web 应用程序在 IIS 下运行,它可能具有您用户的默认凭据以外的其他凭据。
-
明确一点,这行得通。首先它发送没有身份验证的请求,然后发送。我用浏览器试过这个,只是去这个 URL。之后它向我显示了登录窗口,我输入了它们,然后我恢复了我的图像。当我调试它时,我看到的和我的应用程序一样。首先是 401 响应的请求,然后在我登录正确的请求之后。这真的看起来应该像那样工作,因为第一个响应带有一些安全信息、随机数和领域。有什么书可以让我阅读更多有关此安全协议的更多信息以更深入地了解吗?
标签: c# .net security webclient digest-authentication