我们有一个客户端/服务器应用程序,它带有一个富客户端前端(在.Net 中)以及一个管理门户(Asp.Net)。目前,用户必须在富客户端和网站上登录。我们希望他们能够登录富客户端,但如果他们从客户端中启动网站,则不必登录网站。我们怎么能做到这一点?
走另一条路不太重要,但如果可能的话会很好:登录网站,然后不必登录富客户端。
一个可能的解决方案是:
简单的代币解决方案存在设计缺陷:如果需要,您将拥有某种可以逆向工程的秘密。如果圆顶正确,则可以完全避免这种情况。
我会提出一个挑战-响应算法。
*) 用户使用 pw 登录富客户端
*) 从 salt+password 计算 sha256 或类似的哈希值。(哈希 A)
*) 用户点击“转到网站”链接。
*) 启动 http 响应(例如 web 服务),用户获取用户帐户的“获取票号”。这张票的有效期很短(几分钟)
*) 客户端计算哈希(HashA+ticket) HashB
*) 最后 - 浏览器指向 www.example.org/?username=donkey&key=99754106633f94d350db34d548d6091a
*) 服务器检查他计算的哈希值是否与提交的哈希值相同。
这种方法的优点:
-server 从不知道密码,只知道加盐哈希。
- 甚至哈希也不会通过线路传输 -> 没有重放攻击。
OAuth怎么样?
一种开放协议,允许从桌面和 Web 应用程序以简单和标准的方法进行安全 API 授权。
确保令牌有一个超时时间,比如 2-5 分钟,以确保它是真实的。
您可以向打开站点的 URL 添加一个令牌以识别它们。
您必须为令牌添加一些安全性:TTL、哈希、盐