2013-02-21 155 views
3

我有一个内部网,它发布了一个RSS提要,我试图从Windows域环境中的同一个IIS服务器上托管的另一个Intranet站点使用该RSS提要。Windows身份验证当前用户模拟401未授权

两个站点有

<authentication mode="Windows"> 

和匿名认证功能。

(上域的Windows身份验证,但没有)以下工作本地开发:

var request = HttpWebRequest.Create(feedUrl); 
request.Credentials = CredentialCache.DefaultNetworkCredentials; 

XElement f; 
using (var response = request.GetResponse()) 
{ 
    var reader = new XmlTextReader(response.GetResponseStream()); 
    f = XElement.Load(reader); 
} 
return f; 

然而,当我这个部署到生产环境(Windows 2008中)我得到一个401未授权异常。当以域用户身份登录时,我可以在浏览器中正确查看RSS源,但在尝试通过代码访问它时似乎没有进行身份验证。

我也试过:

request.Credentials = New System.Net.NetworkCredential("myUser","myPass","myDomain"); 

但仍是401未授权。任何人都可以提供我所忽视的想法吗?

+0

您在哪种类型的客户端应用程序中编写代码?它是一个桌面应用程序吗?或者也受到Windows身份验证保护的ASP.NET? – 2013-02-21 21:37:03

+0

Asp.Net MVC网络应用程序 – DannyT 2013-02-21 21:37:52

+0

我有完全相同的问题。详细说明在这里:https://serverfault.com/questions/876869/iis-impersonate-401-unauthorized-2x-asp-net-mvc – 2017-10-04 15:42:24

回答

0

当您在VS中本地运行时,CredentialCache.DefaultNetworkCredentials将获得您的用户名,而当您在Web服务器上运行此客户端时,此操作将返回用于执行您的应用程序的帐户。这通常是您的Web服务器本地的NetworkService帐户。这就是为什么当你试图使用这个客户端来进行远程服务认证时,你会得到401.所以你可以配置你的ASP.NET MVC客户端应用程序在有权访问远程服务的域帐户下执行。这可以在IIS管理器中的应用程序池的高级属性中完成。

+0

我试图执行它作为当前登录的域用户。我已经尝试了各种模拟方法,但不断得到401. – DannyT 2013-02-22 00:11:18

+0

你需要配置代理这个工作:http://support.microsoft.com/kb/810572 – 2013-02-22 07:05:10

+0

不幸的是,我没有任何控制外的任何东西IIS所以不认为这会起作用。我只是尝试使用我的域帐户详细信息的应用程序池,但我仍然得到了401.这些相同的细节可以查看浏览器中的资源,非常困惑。感谢您的输入。 – DannyT 2013-02-22 10:25:09

相关问题