我们正在使用' OAuth'来保护我们的webAPI。所有请求都在标头中附带OAuth令牌。为验证令牌,我们使用身份提供商的公钥。一切顺利。
我有一个问题。我相信这不是正确的(而且是安全的方式),但不知道为什么。
每次都使用公钥验证它,我们可以验证一次和下一次后续请求,为什么我们不能将此令牌存储在缓存中(使用emailId作为密钥)以及所有后续命中,我们可以将它与缓存中的令牌存储进行比较。
提前致谢。
答案 0 :(得分:1)
这一切都很好,大多数资源服务器都会这样做。通常,出于存储优化的原因,人们会计算并存储访问令牌的哈希值。
请注意,您可以安全地执行此操作,假设您可以从令牌中提取一些生命周期,并且您将存储不超过该生命周期的(哈希)令牌。
答案 1 :(得分:0)
我认为这取决于访问令牌的特征。如果令牌具有无法更改的固定生命周期并且仅通过检查其加密签名(类似于JSON Web令牌)来验证其有效性,那么您可以安全地缓存验证结果(如果它带来一些速度优势)。 / p>
但访问令牌通常是可撤销的,因此有必要在授权服务器上验证它们。访问令牌信息和验证的端点并未用作OAuth2规范的一部分,但它现在在RFC中作为“内省终点” - https://tools.ietf.org/html/rfc7662
但是,如果有很多请求到来,即使是可撤销的令牌也可以安全地缓存一小段时间(几秒钟)。但这取决于你的申请的性质。