OAuth 刷新令牌最佳实践 [关闭]

Posted

技术标签:

【中文标题】OAuth 刷新令牌最佳实践 [关闭]【英文标题】:OAuth Refresh Token Best Practice [closed] 【发布时间】:2015-05-24 01:37:54 【问题描述】:

我正在为一个项目实施 OAuth,我想知道处理刷新令牌的最佳方式。

我调用的 API 将返回一个带有 access_token、expires_in 和 refresh_token 的 JSON 对象。 所以我想知道,是不是更好:

    计算access_token过期的时间,将其存储在数据库中。每次调用 API 时检查 access_token 是否过期,如果过期则使用 refresh_token 获取新的 access_token。

    (附加问题:我如何确保我计算的令牌过期时间是准确的?因为 expire_in 值可能从 API 服务器生成密钥时开始,而不是从我收到它时开始。)

    只需尝试每次使用 access_token 进行 API 调用,如果返回错误则使用 refresh_token。

我也愿意接受其他实施方案。

【问题讨论】:

【参考方案1】:

本文解释了一些大型云服务的实践: http://blog.cloud-elements.com/oauth-2-0-access-refresh-token-guide

但是,IMO,刷新令牌应该有一个过期时间,比如 1 年。当使用刷新令牌发布新的访问令牌时,它应该会发生变化,但是,到期日期应该保持不变。当您永远需要刷新令牌时,只需发出具有最大日期值的刷新令牌。此外,请确保在发出新的刷新令牌时将旧的访问和刷新令牌标记为已删除。

【讨论】:

【参考方案2】:

客户端应始终准备好处理从 API 返回的指示 access_token 验证失败的错误。根据实现,访问令牌可能已被撤销或声明无效。

然后客户端可以使用refresh_token 获取新的访问令牌并重试。所以你可以选择实现 1. 但它也不能让你从实现 2. 中解放出来,所以你可以选择坚持只实现 2 并尽量减少所需的代码量。

当然,如果你想尽可能地避免错误发生,你可以实现1.优化调用次数,减少整个过程中的错误次数。

【讨论】:

auth0.com/learn/refresh-tokens

以上是关于OAuth 刷新令牌最佳实践 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

访问令牌和刷新令牌最佳实践?如何实现访问和刷新令牌

在 nodejs 中使用 JWT 刷新令牌的最佳实践

同时从移动设备和 Web 刷新 JWT 令牌的最佳实践

在 SPA 中刷新 JWT 的最佳实践?

Spring Boot 中 JWT 的最佳实践是啥?

Node.js 护照 OAuth 2.0 身份验证:存储访问和刷新令牌的位置