OAuth刷新令牌最佳实践

Ang*_*Gao 13 authentication api oauth access-token oauth-2.0

我正在为项目实现OAuth,我想知道处理刷新令牌的最佳方法.

我调用的API将返回一个带有access_token,expires_in和refresh_token的JSON对象.所以我在想,是否更好:

  1. 计算access_token到期的时间,将其存储在数据库中.每次进行API调用时检查access_token是否未过期,如果它已过期,则使用refresh_token获取新的access_token.

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

要么

  1. 只是尝试每次都使用access_token进行API调用,如果返回错误,则使用refresh_token.

我也对其他实施方案持开放态度.

MN_*_*_WA 8

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

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


Han*_* Z. 6

客户端应始终准备好处理从API返回的错误,该错误指示access_token验证失败。取决于实现方式,否则访问令牌可能已被吊销或声明为无效。

然后,客户端可以使用refresh_token获取新的访问令牌,然后重试。因此,您可以选择实施1,但是它也不能使您脱离实施2。因此,您可以选择坚持仅实施2,并尽量减少所需的代码量。

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

  • https://auth0.com/learn/refresh-tokens/ <- 建议不要在浏览器中存储刷新令牌。你建议我应该把它存放在哪里? (2认同)