【问题标题】:Sharing REST tokens between servers在服务器之间共享 REST 令牌
【发布时间】:2015-07-24 01:52:10
【问题描述】:

我需要具有基于令牌的身份验证的 REST API:我们将使用负载平衡器复制应用程序服务器,因为令牌是在用户通过身份验证时由一台服务器生成的,并且来自同一客户端的不同请求可以由不同的服务器处理,是否有通用技术或技术在不同的服务器之间共享这些令牌?

关于技术,我们将使用 Java 堆栈,更具体地说是 Grails。

关于应用服务器,我们可能有不止一个数据库。此评论很重要,因为在与同事讨论时,有人建议使用来自所有应用程序服务器的相同数据库来管理令牌共享。我正在寻找一种不需要集中式数据库的解决方案,它可以让我们在数据库端进行扩展。

【问题讨论】:

    标签: java rest security grails


    【解决方案1】:

    使用基于令牌的身份验证时,有一个服务器对用户进行身份验证并颁发安全令牌。可以通过多种方式对用户进行身份验证(根据数据库验证用户名/密码、验证智能卡上的证书等)。

    一旦令牌由身份验证服务器颁发并签名,就无需进行数据库通信来验证令牌。任何接受令牌的服务都只会验证令牌的数字签名。

    客户端(您的服务的调用者)负责将令牌与请求一起发送。所以无论你的负载均衡器后面的哪个服务器处理传入的请求,它只需要与签名密钥关联的公钥来验证请求是否有效。

    选择哪种安全协议取决于您的要求。 OAuth 经常用于 Internet 应用程序。 WS-FederationSAML-P 在企业环境中被大量使用。

    【讨论】:

      【解决方案2】:

      据我所知,grails 支持JWT(JSON Web 令牌) - 看来这就是您要寻找的东西。基本上,您需要像this 图像中那样分离身份验证服务器。身份验证验证正在发送的用户/通行证,并发出一个易于解析的令牌,无需进一步访问数据库。唯一需要共享的是用于解码传入 JWT 的密钥。看,how 它有效。

      【讨论】:

      • 图片上的第二个请求让我很困惑,为什么身份验证服务器正在返回内容?这不应该由 API 或 App 服务器处理吗?或者这是使用 App 服务器作为 Auth 服务器?
      • 不知道,这可能是个错误。评论询问作者。
      猜你喜欢
      • 2021-07-01
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多