启用桌面应用程序和网站之间的单点登录

时间: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.