编辑-我重写了这个问题以(希望)更好地聚焦它。
需要交互的组件有: ASP.NET网站<--> WCF服务<-->第三方web服务
第3方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服务?
谢谢你的见解。
附言:我确实找到了这篇文章:在我发布了我的问题并正在阅读它的内容之后,我找到了How do you pass user credentials from one process to another for Impersonation in .NET 1.1?。
发布于 2013-03-06 23:30:26
我正在张贴我自己的问题的答案,以向未来的读者确认缺乏其他答案已经意味着什么-不要这样做。
我认为我的问题的核心是我试图让一个匿名进程(在系统帐户下运行的网站会话)以一种Microsoft / Active Directory (也不是最明智的安全战略家)不支持的方式向接收者(WCF服务)标识自己。我试图在通信内容中传递身份,而不是作为通信协议的一部分。在我的网络和系统安全速成课程中,这将是一个非常危险的策略。
简而言之,一端要求对Active Directory (第三方软件)进行身份验证,而另一端要求匿名(网站会话)。
展望未来,我们有两种可能的解决方案-围绕通信构建我们自己的安全性,以便我们可以尽可能安全地传递Active Directory名称/密码,或者说服第三方供应商放宽其身份验证要求(即票务代理)。
https://stackoverflow.com/questions/14166123
复制相似问题