8
运行下面的代码:传递用户名和密码通过URI .NET的HttpWebRequest不起作用
var request = HttpWebRequest.Create("http://username:[email protected]/test-http-status-codes.asp?code=401");
var response = request.GetResponse();
...并检查使用Wireshark的请求表明,没有授权我的客户端尝试(网址为一个简单的服务将永远返回401)。
此代码的初始攻击后发送一个授权报头:
var request = HttpWebRequest.Create("http://username:[email protected]/test-http-status-codes.asp?code=401");
request.Credentials = new NetworkCredential("username", "password");
var response = request.GetResponse();
使用System.Uri
类没有效果。为什么在URL中传递的用户名和密码不用于身份验证?
(我是经过授权头没有初始的挑战意识到this blog post,而不是眼前的问题)
编辑我要补充,这是很容易解决这个限制,例如与该位的代码(添加URL未逃逸的味道),我只是好奇,为什么你要做到这一点:
var userInfo = request.Address.UserInfo;
if (!string.IsNullOrEmpty(userInfo) && userInfo.Contains(':'))
{
request.Credentials = new NetworkCredential(userInfo.Split(':').First(), userInfo.Split(':').Last());
}
呀,我有一个类似的代码 - 我只是不明白为什么HttpWebRequest忽略这个... – friism
我认为这是一个安全问题。许多浏览器现在也忽略了这一点:http://support.microsoft.com/kb/834489我不得不回头看看以前的.NET版本,看它是否被编码使用它,但它明确不是在4.0 –