0

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

需要交互的组件有:ASP.NET website <--> WCF service <--> 3rd party web service

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

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

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

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

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

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

感谢您的任何见解。

PS 我确实找到了这篇文章:How do you pass user credentials from a process to another for Impersonation in .NET 1.1? 在我发布我的问题并且我正在使用它的内容之后。

4

1 回答 1

0

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

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

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

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

于 2013-03-06T15:30:26.140 回答