【问题标题】:Passing NetworkCredentials Object To WCF Service将 NetworkCredentials 对象传递给 WCF 服务
【发布时间】:2013-01-04 22:36:34
【问题描述】:

编辑-我改写了这个问题以(希望)更好地集中它。

需要交互的组件有: ASP.NET 网站 WCF 服务 3rd 方 Web 服务

第 3 方 Web 服务需要通过在构建代理期间指定网络凭据来进行 Windows 身份验证。例如:

ICredentials myCredentials = new NetworkCredential("myUsername", "myPassword", "myADdomain");
VendorWebService webService = new VendorWebService {Credentials = myCredentials};

据我所知,这是我们的 WCF 服务可以模拟用户访问第 3 方 Web 服务的唯一方式。 Windows 身份验证(通过网络凭据)是唯一受支持的模拟方式 - 无法在第 3 方 Web 服务和 WCF 服务之间建立某种信任。

网站在服务帐户下运行,而不是在个人用户的帐户下运行。当我们的用户登录我们的网站时,我们会使用 ActiveDirectory 对其进行验证,但我们只是使用 AD 说“是的,这是一个有效的名称和密码组合”。

我需要一种方法来获取我在网站上知道的信息(用户名、密码)并将其转换为 WCF 服务上的网络凭据。我读到的所有内容都表明,传递用户名/密码甚至网络凭据对象(如果可能的话)是一个很大的安全风险,也是一种非常糟糕的做法。

当网站不在用户帐户下运行时,可以使用哪些选项/技术使网站用户的 Windows 身份可用于 WCF 服务?

感谢您的任何见解。

附:在我发布我的问题并且我正在使用它的内容之后,我确实找到了这个帖子:How do you pass user credentials from one process to another for Impersonation in .NET 1.1?

【问题讨论】:

    标签: wcf active-directory networkcredentials


    【解决方案1】:

    我正在发布我自己问题的答案,以向未来的读者确认缺少其他答案已经意味着什么 - 不要这样做。

    我认为我的问题的核心是我试图让一个匿名进程(在系统帐户下运行的网站会话)以 Microsoft / Active Directory 不支持的方式向收件人(WCF 服务)标识自己(也不大多数理智的安全战略家)。我试图在通信内容中传递身份,而不是作为通信协议的一部分。在我的网络和系统安全速成课程中,这将是一个非常危险的策略。

    简而言之,一端需要对 Active Directory(第三方软件)进行身份验证,而另一端需要匿名(网站会话)。

    展望未来,我们有两种可能的解决方案 - 围绕通信构建我们自己的安全性,以便我们可以尽可能安全地传递 Active Directory 名称/密码,或者说服第 3 方供应商放宽他们的身份验证要求(即票务代理) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多