【发布时间】:2014-12-23 21:49:34
【问题描述】:
我有两个应用程序,一个是桌面客户端,另一个是可选择嵌入桌面客户端的 Web 应用程序。两者都与具有单独数据库和单独用户身份验证机制的单独服务器通信。服务器之间可以相互通信。
我需要能够登录桌面应用程序并使用嵌入式 Web 应用程序,而无需输入 Web 客户端的用户名/密码。
网络应用程序是在我们这边开发的,因此可以进行重大更改(在合理范围内)。体系结构是 Windows 上的 .NET(IIS 和 SQL Server)。
桌面应用程序是在其他地方开发的,因此更改应该是最小的;发出 http 请求并传递令牌是可以的,但创建新的身份验证机制则不行。架构未知,解决方案应该独立于平台。
我可以使用两台服务器之间的某种信任来创建一次性身份验证令牌,桌面客户端可以将其传递给 Web 客户端以创建会话吗?
我可以加入这个或其他类似用例的任何现有实现吗?请注意,不一定需要互联网连接,只保证可以访问两台服务器。
如果没有任何简单/快速/免费的解决方案,我在想这样的事情(D 是桌面应用程序,W 是 Web 应用程序):
- 用户登录客户端 D 并希望打开客户端 W
- 服务器 D 向服务器 W 请求特定用户的令牌
- 服务器 W 创建一个新令牌,在内部将其映射到请求的用户名并返回该令牌
- 客户端 D 使用用户名和令牌登录客户端 W
- 服务器 W 创建一个新会话并忘记了令牌,因此无法再次使用它
服务器之间的流量将通过 SSL/TLS、IP 白名单、使用预配置的密码进行身份验证,并包括一个唯一的计数器和时间戳以防止重放攻击。
桌面客户端将通过嵌入式浏览器向服务器发出请求来与 Web 应用程序通信。对于身份验证,它将通过 HTTPS 将用户名和令牌发布到登录页面。
假定客户端与其代表服务器之间的通信是安全的。
我还缺少什么吗?
谢谢。
【问题讨论】:
标签: security session authentication web-applications client-server