使用Redis检查每个请求的访问令牌

Max*_*der 13 api rest redis access-token oauth-2.0

我目前正在为我的RESTful API实现OAuth 2.0架构.

对于每个请求,我在HTTP标头中设置了授权承载令牌,以便我的所有客户端进行授权请求.

Authorization: Bearer sdflksd3r4823vkn95-03850432 
Run Code Online (Sandbox Code Playgroud)

我理解通常的做法是在API到期日之前接受令牌.但是如果用户想要撤销令牌,我需要采用一种方法来检查每个请求的令牌状态.

所以我想去Db检查每个HTTP请求.我有一种感觉,由于性能原因,这不会很好地扩展.

所以我想知道像Redis这样的解决方案是否适合快速单次读取访问令牌状态?

seh*_*ope 14

为令牌设置HMAC的目的是使服务器可以快速验证它而无需调用任何外部数据存储(例如Redis,MySQL等).由于没有共享状态(用于验证令牌是令牌本身和HMAC的密钥的所有信息),这具有向多个服务器精确扩展的额外好处.

如果您要获得撤销令牌的黑名单,那么像Redis这样的东西可能会很好(尽管仍然比没有为每个令牌验证做远程调用慢).正确设置,Redis实例和API服务器之间的延迟很低,每个请求应该会看到<10ms.

奖励:进一步加快速度的另一个选择是使用Bloom过滤器来处理被拒绝的API请求的缓存.这样,如果Bloom过滤器将请求令牌标记为可能已撤销,则只会转到Redis.请注意,由于这是另一层缓存,因此当令牌被拒绝时,您必须更新Bloom过滤器的状态.


kde*_*mme 6

我实现了类似的处理由JWT生成的撤销令牌的东西.

我正在使用redis来设置已过期的撤销令牌,因此令牌会自动从redis中删除.我有一个中间件来检查redis提供的令牌.在这里查看完整的帖子.希望能帮助到你