Api OAuth刷新令牌最佳实践

Api OAuth刷新令牌最佳实践,api,authentication,oauth,oauth-2.0,access-token,Api,Authentication,Oauth,Oauth 2.0,Access Token,我正在为一个项目实现OAuth,我想知道处理刷新令牌的最佳方法 我调用的API将返回一个JSON对象,该对象带有access\u令牌、expires\u in和refresh\u令牌。 所以我想知道,最好是: 计算access_令牌将过期的时间,并将其存储在数据库中。每次进行API调用时,请检查访问令牌是否未过期,如果已过期,请使用刷新令牌获取新的访问令牌 (附加问题:我如何确保为令牌过期计算的时间是准确的?因为expire_in值可能从API服务器生成密钥时开始,而不是从我收到密钥时开始。)

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

我调用的API将返回一个JSON对象,该对象带有access\u令牌、expires\u in和refresh\u令牌。 所以我想知道,最好是:

  • 计算access_令牌将过期的时间,并将其存储在数据库中。每次进行API调用时,请检查访问令牌是否未过期,如果已过期,请使用刷新令牌获取新的访问令牌

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

  • 每次尝试使用access_令牌进行API调用,如果返回错误,则使用refresh_令牌

  • 我也愿意接受实现此功能的其他选项。

    客户端应随时准备处理API返回的错误,该错误指示
    访问\u令牌验证失败。根据实现的不同,访问令牌可能已被撤销或声明为无效

    然后,客户端可以使用
    刷新\u令牌
    获取新的访问令牌并重试。因此,您可以选择实现1。但这并不能使您免于实现2。同样,您也可以选择只实现2,并尽量减少所需的代码量


    当然,如果您希望尽可能地防止错误的发生,您可以实现1。在整个过程中优化呼叫数量并减少错误数量。

    本文介绍了一些大型云服务的做法:

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