给出以下配置:
ASP.NET Web应用程序将通过向第三方Web服务发出请求来实现其大部分功能。因此,Web应用程序需要其用户的 Windows凭据。
ASP.NET Web应用程序将像第三方Web服务的 UI代理。此外,第三方Web服务不是单身。对于那些第三方Web服务(许多Windows域)的许多实例,Web应用程序应该是 UI代理。因此,Web应用程序就像解复用UI代理 - 如果有这样的术语:)它代理第三方Web服务的多个实例。
现在,我正在努力寻找一种安全的方法,通过网络应用程序将用户的凭据(用户名,密码)从Web客户端传递到第三方服务:)
在用户提供凭据后,在工作会话开始时,凭据保持的位置,直到工作会话结束?我使用各种媒体,例如: HTTP Cookie,HTTP标头,HTML本地存储,服务器内存,网络会话,应用程序数据库。
关于上述问题,加密凭据的好方法是什么,以便在需要时可以解密,也就是说,在准备第三方Web服务请求时(对称加密)?所有通信都是 HTTPS 。
我知道这是一个奇怪的谜题:)
更新
也许让第三方Web服务支持代理身份验证模式(然后使用 OAuth 或类似的东西)是最好的。正确?
更新:类似(或重复?)的问题 - 似乎是一个热门问题
i *must* store third party credentials in my database. best way?
How to store user password for third party service in Python?
Security model: log in to third-party site with user's credentials
Storing third-party passwords for reuse across pages
Encrypting 3rd party credentials
What's a smart way of storing user credentials for an external site (that does not use OAuth)?
Need to ephemerally store third-party password
Storing third-party auth info securely
Reversible password storage obfuscation method for third-party login credentials
storing the third party credentials in the database/some secure place
答案 0 :(得分:1)
鉴于您拥有许多第三方服务(see comment),所有这些服务都存在于客户的域中,您的网络应用程序(居住在这些域之外)不应直接与第三方服务通信。
您的应用程序将成为黑客攻击的目标,因为它会以明文形式处理用户的域凭据。
我认为唯一可行的解决方案是让用户的浏览器与第三方服务通信,以使用集成Windows身份验证(IWA)检索数据,然后将此数据发布到您的Web应用程序。
您必须在第三方应用程序上配置跨源资源共享(CORS)才能使用(或使用其他方式circumvent the same-origin policy)
答案 1 :(得分:0)
在这种奇怪的场景中没有最好的方法,但唯一的方法是在应用程序会话中存储用户名和密码。这样至少可以确保密码不会泄露给外部世界,也可以在用户退出时自动删除。有权访问生产系统的人可以配置服务器和读取密码。您可能需要应用双向加密(AES),以使生产支持人员难以阅读它。
您已经提到第三方系统无法触及,我不确定您是否可以对凭证通过的方式提出一些细微的改进。试试这个。
在这种情况下,您身边的任何人都无法解密,但第三方可以使用私钥解密。您和第三方需要交换ssh密钥作为一次性设置。