OAuth和粘性会话

时间:2013-07-18 19:34:42

标签: oauth oauth-2.0 authorization load-balancing

我使用OAuth 2进行授权,需要在负载均衡的群集中实现它。我考虑了一些方法,但似乎没有办法围绕集中式方法。以下是我的想法:

1。使用源IP平衡

在一台服务器上缓存令牌并通过IP进行平衡是理想的,但是,IP不能被认为是静态的。因此,当同一用户尝试使用有效令牌访问需要来自另一个IP的授权的服务时,它将失败,因为它未在此计算机上缓存。此用户登录的其他设备也不会到达同一台计算机。

2。使用负载平衡cookie平衡

也不是一个真正的选择,因为不能假设每个客户都实现了cookie存储。

3。使用Authorization标题

进行平衡

通过散列Authorization: Bearer令牌标头进行平衡是有问题的,因为第一个请求(用于请求授权令牌)没有Authorization标头,因此,以下请求可能不会遇到同一个实例。 / p>

我目前的方法是使用中央Redis实例进行授权令牌存储。 是否还有一个选项可以避免采用集中式方法?

1 个答案:

答案 0 :(得分:2)

我认为你还有两个选择可以考虑。

一种是按会话ID进行平衡。应用程序服务器通常可以配置为通过cookie或添加到每个链接的GET参数来管理会话,因此它不一定需要cookie存储。此外,很少有HTTP客户端仍未实现cookie存储,因此您可能需要重新考虑列表中的第2项。

另一个是使用自包含的令牌,例如带签名的JSON Web令牌(JWT)(JWS)。验证自包含令牌可能不需要中央数据库,每个服务器实例可以单独检查令牌签名并从令牌本身提取授权详细信息。但是,如果您需要支持撤销令牌,您可能仍需要一个中央数据库来存储至少一个已撤销令牌的黑名单。

虽然我无法为您提供完整的解决方案,但希望这能为您提供一些想法。