【发布时间】:2015-02-24 16:55:33
【问题描述】:
我有一个使用 Windows 身份验证的 MVC4 应用程序。此应用程序抓取各种互联网站点。此应用程序托管在我们的 Intranet 中,需要通过我们的公司代理才能访问 Internet。通过一些调试,我可以看到我已完全通过用户 ID 进行身份验证并且我正在模拟。我的问题是我不断收到错误The remote server returned an error: (407) Proxy Authentication Required.。我可以验证我的代码是否有效,因为如果我为代理硬编码我的凭据,它会按预期工作。
var windowsIdentity = (WindowsIdentity) HttpContext.Current.User.Identity;
using (windowsIdentity.Impersonate())
{
var webClient = new WebClient
{
Proxy = new WebProxy(PROXY)
{
Credentials = CredentialCache.DefaultNetworkCredentials
}
};
var str = webClient.DownloadString("http://google.com");
}
使用CredentialCache.DefaultCredentials 也不起作用。为什么我不能冒充自己(或访问该站点的任何人)并使用该用户对代理进行身份验证?
【问题讨论】:
-
Windows 身份验证设计用于本地 Intranet。有一个隐含的依赖关系,即发送的数据包是以相同的方式接收的。代理可以重新安排接收数据包的方式并使您的请求无效。如果您使用任何类型的身份服务器,则请求将被拒绝,因为代理向标头中注入了不同的请求方/
-
假设代理使用 Windows 身份验证,您可能需要启用委派。这为服务器提供了特殊权限,以便它可以通过网络模拟用户。您可能还需要配置 IIS 和/或代理服务器以允许这样做,我不熟悉细节。将代理服务器配置为允许您的服务器未经身份验证的访问几乎肯定会更容易。
标签: c# asp.net-mvc-4 windows-authentication