【问题标题】:WCF impersonation/ AuthenticationWCF 模拟/身份验证
【发布时间】:2011-04-11 09:23:12
【问题描述】:

我已经查看了模拟示例,但我仍然遇到问题。

结构的一些细节:

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

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

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

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

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

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

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

    【讨论】:

    • 投了你一票,因为至少这与我迄今为止所看到的不同。至少明天才能测试。所以要确认,身份 impersonate=true 是在 ASP 中添加的,而不是在 WCF 中?但是我确实尝试过一次 ASP,但对我来说失败了。我所做的是使用操作上下文。可以解释一下这与您的有何不同?
    • 你需要在web app上开启windows auth,并且使用impersonate=true。这将允许您模拟从 asp.net 站点对 wvf 服务的调用。您可能还必须确保在您的域中使用 kerberos,而不仅仅是 NTLM。
    • Web App wise 肯定开启了 Windows 身份验证。好的,如果我有时间的话,我今晚去试试
    • 谢谢,这对我所问的这部分问题有所帮助。但我注意到,只要我传入 Credentials = CredentialCache.DefaultNetworkCredentials,未经身份验证的用户也可以调用 WCF 服务。无论如何要防止这种情况? WCF 已经设置为窗口身份验证 + 禁止匿名
    • 来自文档:“DefaultNetworkCredentials 返回的凭据表示当前运行应用程序的安全上下文的身份验证凭据。对于客户端应用程序,这些通常是 Windows 凭据(用户名、密码和域)运行应用程序的用户。对于 ASP.NET 应用程序,默认网络凭据是登录用户或被模拟用户的用户凭据。您的 Web 应用程序是否有表单/Windows 登录和模拟?
    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 2011-08-18
    • 2012-08-16
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多