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

尤西·科苏宁(Jussi Kosunen)

我有两个应用程序,一个是桌面客户端,另一个是Web应用程序,可以选择将其嵌入到桌面客户端中。两者都与具有独立数据库和独立用户身份验证机制的独立服务器通信。服务器可以彼此通信。

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

该网络应用是在我们这边开发的,因此可能会在一定程度上进行重大更改。体系结构是Windows(IIS和SQL Server)上的.NET。
桌面应用程序是在其他地方开发的,因此更改应尽量少;进行http请求并传递令牌是可以的,但是不能创建新的身份验证机制。体系结构未知,解决方案应独立于平台。

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

我可以插入这个或另一个类似用例的任何现有实现吗?请注意,不一定需要Internet连接,只能保证访问这两个服务器。

如果没有任何简单/快速/免费的解决方案,我在想这样的事情(D是桌面应用程序,W是Web应用程序):

  1. 用户登录到客户端D并想要打开客户端W
  2. 服务器D向服务器W询问特定用户的令牌
  3. 服务器W创建一个新令牌,将其内部映射到请求的用户名并返回该令牌
  4. 客户端D使用用户名和令牌登录到客户端W
  5. 服务器W创建一个新会话,并忘记了令牌,因此无法再次使用它

服务器之间的流量将通过SSL / TLS,被列入白名单的IP,使用预先配置的密码进行身份验证,并包括唯一的计数器和时间戳,以防止重放攻击。
桌面客户端将通过嵌入式浏览器向服务器发出请求,从而与Web应用程序进行通信。为了进行身份验证,它将HTTPS将用户名和令牌发布到登录页面。
假定客户端与其代表服务器之间的通信是安全的。

我还有什么想念的吗?

谢谢。

塞缪尔

我认为干扰最小的解决方案将是最好的。我喜欢模块化身份验证的想法,您可以轻松地使用新的身份验证方法。您仅具有两个活动的身份验证模块。

让我们看一下服务器D:

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

似乎您已经在考虑这条路了,但是我建议您不要让服务器互相询问令牌。而是让服务器使用对该服务器有效的令牌互相询问会话数据。如果您使用服务器D上的用户/密码登录,请让服务器D为您提供与服务器D有效的会话令牌。然后,在与服务器W进行通信时,请服务器W询问服务器D给定的会话令牌是否有效。服务器D可以简单地返回是/否,或者返回给定令牌的所有公共会话数据。

与您建议的方案相比,此解决方案至少具有两个优点:

  1. 您不必保留两个令牌。您只需存储使用用户/密码进行身份验证的最后一个服务器给您的任何令牌。这也使您可以像对待服务器使用相同的身份验证一样处理服务器,如果将来希望更改auth方法,则可以提高灵活性。
  2. 令牌到期更为简单。您将不会遇到不匹配的过期问题。每当您的单个令牌过期时,您就不再通过任一服务器进行身份验证。

你怎么认为?有道理?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

客户端-服务器应用程序中的Google Play服务身份验证

通过 WCF 服务对 MVC 客户端应用程序进行身份验证和授权?

使用Nginx和Tomcat Web应用程序进行TLS客户端身份验证

如何在ASP.NET Web应用程序中的服务器和客户端之间进行通信?

在WEB API服务器和Android客户端应用程序之间共享模型的最佳实践是什么

Android客户端-服务器应用程序和Web服务

如何在 python 中的 Twisted 客户端服务器应用程序中添加身份验证(用户名/密码)?

服务器和客户端身份验证:如何从服务器创建Firebase身份验证令牌并将其发送到Web客户端?

通过SSH和身份验证密钥使用的客户端和服务器连接

Kuberntes入口和客户端身份验证应用程序

输入验证是针对企业应用程序的客户端还是服务器端?

在 nodejs Web 应用程序中,firebase 配置的哪些部分位于服务器端和客户端

wso2身份服务器客户端应用程序

Oracle 服务器数据库和 iOS 客户端应用程序之间的数据通信

使用 firebase 令牌在我的服务器和应用程序之间进行身份验证是否安全?

客户端/服务器应用程序

WCF客户端服务器应用程序

应用程序的客户端 - 服务器架构

在服务器上验证移动应用程序客户端的方法

Oauth2.0:客户端应用程序与授权服务器之间的通信

将客户端-服务器应用程序转换为 Web 连接:REST 还是客户端查询?

尝试与 Webpack 和 Express 同时开发服务器和客户端应用程序

Facebook身份验证:服务器端与客户端。Python / Django

来自外部客户端应用程序的WordPress RESTful服务的基本身份验证

当仅使用社交提供商登录身份验证时,客户端和服务器之间的身份验证策略应该是什么?

Windows的客户端/服务器Web基础应用程序

Web应用程序的客户端与服务器通信的样式指南

如何从客户端而不是服务器或Web应用程序获取数据?

如何从客户端Web发送消息到服务器MFC应用程序?