启用桌面应用程序和网站之间的单点登录
时间:2020-03-05 18:58:23 来源:igfitidea点击:
我们有一个客户端/服务器应用程序,具有一个丰富的客户端前端(在.Net中)和一个管理门户(Asp.Net)。当前,用户必须同时在富客户端和网站上登录。我们希望使他们能够登录到富客户端,但是如果他们从客户端内部启动该网站,则不必登录。我们该怎么做?
换种方式不太重要,但如果可能的话,那就更好了:登录网站,然后不必登录富客户端。
解决方案
回答
我们可以在打开站点的URL中添加一个标记以识别它们。
我们必须为令牌添加一些安全性:TTL,哈希,盐
回答
可能的解决方案是:
- 登录到富客户端
- 服务器生成一个随机令牌并将其存储给登录用户
- 富客户端从服务器获取该令牌
- 该令牌用于指向网站的网址中
- 转到该网址(使用富客户端的链接或者按钮)将自动登录用户并重置令牌
回答
确保令牌上有超时(例如2-5分钟),以确保它是真实的。
回答
简单的令牌解决方案存在设计缺陷:我们将拥有某种可以根据需要进行反向工程的秘密。如果圆顶正确,则可以完全避免这种情况。
我会提出一个挑战-响应算法。
*)用户使用pw登录到富客户端
*)根据salt + password计算出sha256或者类似的哈希值。 (哈希A)
*)用户点击"转到网站"链接。
*)开始http响应(例如Web服务),用户获取用户帐户的"获取票证编号"。该票将在短时间内有效(几分钟)
*)客户端计算hash(HashA + ticket)HashB
*)最终浏览器指向www.example.org/?username=donkey&key=99754106633f94d350db34d548d6091a
*)服务器检查其计算出的哈希值是否与提交的哈希值相同。
这种方法的优点:
-server从不知道密码,只有盐腌的哈希。
-甚至永远不会通过网络传输哈希->没有重播攻击。
回答
OAuth呢?
An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.