2011-04-11 232 views
2

我已经看过模拟的例子,但我仍然有问题。WCF模拟/身份验证

结构的一些细节:

ASP.net:Windows身份验证
WCF:在IIS托管,目前正在使用允许匿名用户

我想实现的是允许通过身份验证的Windows登录传递给WCF进行访问控制,例如阻止匿名用户尝试调用服务。

使用ASP.net应用程序时,如果计算机以管理员身份登录,但在Active Directory中失败,因为它不是AD下的定义用户,浏览器的弹出窗口将提示输入用户名和密码。

当提示时,用户将输入正确的用户ID和密码对应于AD。因此,登录通过。
但是,当我使用WCF的模拟将012窗口身份验证凭据传递给WCF时,它显示为管理员而不是ASP.net身份验证的用户信息。

我该怎么做才能获得正确的ASP.net认证用户信息,而不是用户在Windows中登录的内容。

回答

4

在你的ASP.Net应用程序中,你必须在你的web.config中设置<identity impersonate="true"/>

然后,你将不得不冒充您的来电添加到WCF服务,像这样的ASP.Net应用内:

using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate()) 
{ 
    WebClient client = new WebClient 
     { 
     Credentials = CredentialCache.DefaultNetworkCredentials 
     }; 
    string result = client.DownloadString("http://someserver"); 
} 

还检查了patterns & practices: WCF Security Guidance关于如何添加教程一步一步从Web应用程序模拟WCF调用。

+0

投票结果至少与我目前看到的情况不同。至少在明天之前将无法测试。所以要确认,标识impersonate = true是添加在ASP,而不是WCF?但是我曾尝试过一次ASP,失败了。我所做的是使用operationalContext。那么有可能解释你与你有什么不同? – 2011-04-11 15:26:10

+0

您需要打开Web应用程序的Windows身份验证,并使用impersonate = true。这将允许您模拟从asp.net站点调用wvf服务。您可能还必须确保您在域中使用Kerberos,而不仅仅是NTLM。 – 2011-04-11 19:39:55

+0

Web App明智地打开了Windows身份验证。好吧,我今晚可以试试,如果我有时间 – 2011-04-12 01:06:26