我正在为项目实施OAuth,我想知道处理刷新令牌的最佳方法。
我调用的API将返回一个带有access_token,expires_in和refresh_token的JSON对象。 所以我想知道,是否更好:
计算access_token到期的时间,将其存储在数据库中。每次进行API调用时检查access_token是否未过期,如果它已过期,则使用refresh_token获取新的access_token。
(附加问题:如何确保我为令牌过期计算的时间是准确的?因为expire_in值可能从API服务器生成密钥时开始,而不是在我收到密钥时开始。)
OR
我也愿意接受其他实施方案。
答案 0 :(得分:5)
客户端应始终准备好处理从API返回的错误,该错误指示access_token
验证失败。根据实现,访问令牌可能已被撤销或声明为无效。
然后,客户端可以使用refresh_token
获取新的访问令牌,然后重试。所以你可以选择实现1.但它并没有让你免于实现2.所以你可以选择坚持只实现2并尽量减少所需的代码量。
当然,如果你想尽可能地防止错误发生,你可以实现1.优化调用次数并减少整个过程中的错误数量。
答案 1 :(得分:4)
本文介绍了一些大型云服务的实践: http://blog.cloud-elements.com/oauth-2-0-access-refresh-token-guide
但是,IMO,刷新令牌应该有一个到期时间,比如1年。当使用刷新令牌发出新的访问令牌时,它应该更改,但是,到期日期应该保持不变。当您需要永久刷新令牌时,只需发出具有最大日期值的刷新令牌。此外,请确保在发出新刷新令牌时将旧访问和刷新令牌标记为已删除。