我已经查看了假冒示例,但仍然遇到问题。
结构的一些细节:
ASP.net:Windows 身份验证
WCF:托管在 IIS 中,当前使用允许匿名用户
我想要实现的是允许将经过身份验证的 Windows 登录传递到 WCF 进行访问控制,例如阻止匿名用户尝试调用服务。
使用 ASP.net 应用程序时,如果计算机以管理员身份登录,但由于不是 AD 下定义的用户而在 Active Directory 中失败,浏览器将弹出窗口提示输入用户 ID 和密码。
出现提示时,用户将输入与 AD 对应的正确用户 ID 和密码。至此,登录成功。
但是当我使用 WCF 的模拟将窗口身份验证凭据传递给 WCF 时,
它显示我作为管理员,而不是 ASP.net 验证的用户信息。
我应该如何获取正确的 ASP.net 身份验证用户信息而不是用户在 Windows 中登录的信息。
最佳答案
在您的 ASP.Net 应用程序中,您必须设置 <identity impersonate="true"/>
在您的 web.config 中。
然后,您必须在 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 调用添加模拟的分步教程。
关于c# - WCF 模拟/身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5619227/