WCF模拟/身份验证

时间:2011-04-11 09:23:13

标签: c# wcf

我已经看过模仿的例子,但我仍然有问题。

结构的一些细节:

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

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

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

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

如何获取正确的ASP.net身份验证用户信息,而不是用户在Windows中登录的内容。

1 个答案:

答案 0 :(得分:4)

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

然后你必须在ASP.Net应用程序中使用类似的东西为你的WCF服务调用添加模拟:

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调用添加模拟的分步教程。