将NetworkCredentials对象传递给WCF服务

时间:2013-01-04 22:36:35

标签: wcf active-directory networkcredentials

编辑 - 我重写了这个问题(希望)更好地关注它。

需要互动的组件是: ASP.NET网站< - > WCF服务< - >第三方网络服务

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

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

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

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

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

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

感谢您的任何见解。

P.S。我发布了这个帖子后发现了这个帖子:How do you pass user credentials from one process to another for Impersonation in .NET 1.1?我正在使用它的内容。

1 个答案:

答案 0 :(得分:0)

我正在回答我自己的问题,向未来的读者证实其他答案的缺失已经暗示 - 不要这样做。

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

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

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