我正在做一个演示项目,我必须为OAuth2流程实现一个授权服务器。我正在研究授权代码的最佳实践,当我读到here时:
由于授权码的寿命很短且一次性,因此您可以将其实现为自编码令牌。使用此技术,您可以避免将授权码存储在数据库中,而是将所有必要的信息编码到授权码本身。您可以使用服务器端环境的内置加密库,也可以使用JSON Web Signature(JWS)等标准。
这似乎是一个非常有趣的方法,但我对 * 一次性 * 有一些怀疑。没有数据存储/缓存,身份验证服务器如何知道它是否是第一次看到auth代码(这将是一个编码的令牌)?我的意思是:我可以重复发送相同的请求来交换认证码,认证服务器永远不会阻止第一个请求之后的请求。我需要JWS的特定实现吗?我做错了假设吗?或者 * 一次性 * 在文章中有其他含义?
1条答案
按热度按时间q9rjltbz1#
Later in the article's series,有响应:
如果您正在实现自编码授权码,如我们的示例代码,则需要跟踪在令牌的生命周期内使用的令牌。一种方法是在代码的生命周期内将代码缓存在缓存中。这种方法在验证代码时,我们可以首先通过检查代码该高速缓存来检查它们是否已经被使用。一旦代码到达其到期日期,它将不再在缓存中,但我们可以根据有效期拒绝它
基本上,您仍然需要一种数据存储/缓存来跟踪“使用过的”授权码。