客户端服务器和Web应用程序之间的身份验证

问题描述:

我有两个应用程序,一个是桌面客户端,另一个是可选嵌入桌面客户端的Web应用程序。两者都使用单独的数据库和单独的用户验证机制与单独的服务器通信服务器可以相互通信。客户端服务器和Web应用程序之间的身份验证

我需要能够登录到桌面应用程序并使用嵌入式Web应用程序,而无需输入Web客户端的用户名/密码。

网络应用程序是在我们这边开发的,所以可以进行重大更改(在合理范围内)。架构是Windows上的.NET(IIS和SQL Server)。
桌面应用程序是在别处开发的,所以更改应该尽可能少;使http请求和传递一个令牌是好的,但创建一个新的认证机制不是。架构不明,解决方案应该是平*立的。

我可以在两台服务器之间使用某种信任来创建一次性身份验证令牌,桌面客户端可以将这种令牌传递给Web客户端以创建会话?

这个或其他类似用例可以插入吗?请注意,不得要求互联网连接,只保证访问两台服务器。

如果没有任何容易/快速/免费的解决方案,我想是这样的(d是桌面应用程序,W是Web应用程序):在给客户d

  1. 用户登录并希望打开客户端W¯¯
  2. 服务器d要求服务器W为特定用户
  3. 服务器W令牌创建新的令牌,在内部把它映射到所请求的用户名和到客户端返回令牌
  4. 客户d日志W¯¯使用用户名和标记
  5. 服务器W创建一个新的会话,而忘记了令牌,因此它不能再被使用

服务器之间的流量将通过SSL/TLS,IP白名单中,使用预配置的密码认证,包括独特的计数器和时间戳防止重播攻击。
桌面客户端将通过嵌入式浏览器向服务器发送请求,从而与Web应用程序通信。对于身份验证,它将HTTPS POST用户名和令牌到登录页面。
客户端与其代表服务器之间的通信被认为是安全的。

有什么我仍然失踪?

谢谢。

我认为最不显眼的解决方案是最好的。我喜欢模块化身份验证的想法,您可以轻松地使用新的身份验证方法。您只需拥有两个活动的认证模块。

让我们来看看服务器d:

  1. 用户名/密码认证。你取用户名和密码,并对数据库中的内容进行验证(或希望其散列),并返回令牌。带有返回令牌的请求将会成功,直到令牌过期。
  2. 同行认证。您从请求中获取给定的会话标记并将其提交给服务器W进行验证。如果服务器W不返回200,您应该禁止访问。这也是共享会话数据的好机会。

看来你已经在想这个道路了,但是我建议你不要让服务器互相问对方的标记。而是让服务器使用对该服务器有效的令牌相互询问会话数据。如果使用服务器D上的用户/传递进行登录,请让服务器D为您提供一个对服务器D有效的会话令牌。然后,当与服务器W通信时,如果给定的会话令牌有效,让服务器W询问服务器D.服务器D可以简单地返回yes/no或返回给定令牌的所有公共会话数据。

该解决方案拥有超过您提出了一个至少有两个好处:

  1. 你不必让两个记号。您只需将使用用户/通行证进行身份验证的最后一个服务器的任何标记存储给您。这也使您能够像处理服务器一样处理服务器,如果您希望更改auth方法,将来可以使用更多的灵活性。
  2. 令牌过期更直接。你不会有失配的失效处理。无论何时您的单个令牌过期,您都不再通过任一服务器进行身份验证。

您怎么看?合理?

顺便说一句,我认为SSL可以防止重放攻击。

+0

不错,这是更清洁!此外,感谢有关SSL和重播攻击的领导:) – 2014-10-28 13:56:54