在服务器之间共享REST令牌

时间:2015-07-24 01:52:11

标签: java rest security grails

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

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

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

2 个答案:

答案 0 :(得分:2)

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

一旦令牌由身份验证服务器发出并签名,则无需数据库通信即可验证令牌。任何接受令牌的服务都只会验证令牌的数字签名。

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

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

答案 1 :(得分:2)

据我所知,grails支持JWT(JSON Web Token) - 看来这就是你要找的东西。基本上,您需要将身份验证服务器与this图像分开。身份验证会验证发送的用户/通行证,并发出一个易于解析的令牌,而无需进一步访问数据库。仅需要共享的内容是用于解码传入JWT的密钥。请参阅how它有效。