我有两个应用程序,一个是桌面客户端,另一个是Web应用程序,可选择嵌入桌面客户端。两者都使用单独的数据库和单独的用户身份验证机制与单独的服服务器可以相互通信。
我需要能够登录桌面应用程序并使用嵌入式Web应用程序,而无需输入Web客户端的用户名/密码。
Web应用程序是在我们这边开发的,因此可以进行重大更改(在合理范围内)。架构是Windows上的.NET(IIS和SQL Server) 桌面应用程序是在别处开发的,因此更改应该是最小的发出http请求并传递令牌是可以的,但是创建一个新的身份验证机制并不是。架构未知,解决方案应该是平台无关的。
我可以在两台服务器之间使用某种信任来创建一次性身份验证令牌,桌面客户端可以将其传递给Web客户端来创建会话吗?
我可以插入这个或其他类似用例的现有实现吗?请注意,不得要求互联网连接,只能保证对两台服务器的访问。
如果没有任何简单/快速/免费的解决方案,我会想到这样的事情(D是桌面应用程序,W是Web应用程序):
服务器之间的流量将通过SSL / TLS,IP白名单,使用预配置的密码进行身份验证,并包含唯一的计数器和时间戳以防止重放攻击。
桌面客户端将通过嵌入式浏览器向服务器发出请求,从而与Web应用程序通信。对于身份验证,它会将用户名和令牌HTTPS POST到登录页面
客户端及其代表服务器之间的通信被认为是安全的。
我还有什么遗失的吗?
感谢。
答案 0 :(得分:2)
我认为最不突兀的解决方案是最好的。我喜欢模块化身份验证的想法,您可以轻松地使用新的身份验证方法。您只需要两个活动的身份验证模块。
我们来看看服务器D:
好像你已经在思考这条路了,但我建议你没有让服务器互相询问令牌。而是让服务器使用对该服务器有效的令牌互相询问会话数据。如果使用服务器D上的user / pass登录,请让服务器D为您提供对服务器D有效的会话令牌。然后,当与服务器W通信时,如果给定的会话令牌有效,请让服务器W询问服务器D.服务器D可以简单地返回yes / no或返回给定令牌的所有公共会话数据。
此解决方案比您建议的解决方案至少有两个好处: