2013-01-04 44 views
0

编辑 - 我重写了这个问题(希望)更好地集中它。将NetworkCredentials对象传递给WCF服务

需要交互的组件包括: ASP.NET网站< - > WCF服务< - >第三方web服务

第三方Web服务通过contstruction过程中指定一个网络凭证要求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?,并且我正在消耗其内容。

回答

0

我发布了一个自己的问题的答案,以确认未来的读者什么是缺乏其他答案已经暗示 - 不这样做。

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

简而言之,一端需要Active Directory(第三方软件)的身份验证,另一端需要匿名(网站会话)。未来,我们有两种可能的解决方案 - 围绕通信建立我们自己的安全性,以便尽可能安全地传递Active Directory名称/密码,或者说服第三方供应商放宽他们的认证要求(例如,票务代理)。

相关问题