我已经看过模仿的例子,但我仍然有问题。
结构的一些细节:
ASP.net:Windows身份验证
WCF:托管在IIS中,目前正在使用允许匿名用户
我想要实现的是允许将经过身份验证的Windows登录名传递给WCF以进行访问控制,例如阻止匿名用户尝试调用该服务。
使用ASP.net应用程序时,如果计算机以管理员身份登录,但在Active Directory中失败,因为它不是AD下的已定义用户,则浏览器弹出将提示输入用户ID和密码。
出现提示时,用户将输入与AD对应的正确用户ID和密码。因此,登录已通过 但是当我使用WCF的模仿将窗口身份验证凭据传递给WCF时, 它显示我是管理员而不是ASP.net认证的用户信息。
如何获取正确的ASP.net身份验证用户信息,而不是用户在Windows中登录的内容。
答案 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调用添加模拟的分步教程。