Podio Oauth - 刷新令牌寿命

Podio Oauth - refresh token lifespan

我目前正在致力于 Podio 集成,我偶然发现一些文章没有给出明确的答案 refresh_token 是否会自行过期以及在这种情况下获取新刷新令牌的确切流程是什么。

文章数:

- 它不会过期(用户名中有 Podio 的人的回答,最近)

https://help.podio.com/hc/en-us/community/posts/206669587-Get-new-refresh-token - 它过期了,你把它作为响应的一部分但不是 rly?有讨论无定论

我问这个是因为我使用过很多服务和 OAuth 实现,但这是第一次刷新令牌实际上变得无效。那么,如果 28 天过去了,那么用户必须重新进行身份验证吗?或者只是一个令牌失效但 "grant" 仍然存在?我不得不说这很令人困惑,因为我习惯于处理 grant == refresh token,但我在 OAuth 规范中理解它。 此外,我们只想将刷新令牌存储在数据库中。 我很想测试一下,但我不想等 28 天。

文档没有明确说明刷新令牌的寿命是多少。

我希望 Podio 的人对此给出明确的答案。刷新令牌是否过期,是否仅在完全不活动(没有 api 调用)或只是固定数量时才过期,在什么情况下(不活动或时间过去了),获取刷新令牌的确切流程是什么?需要用户重新验证?

这里有两个部分在起作用,访问令牌刷新令牌

访问令牌在通过 expires_in 属性指定的时间间隔后过期。

如果超过 28 天未使用,刷新令牌可能会过期。每次您使用刷新令牌请求新的访问令牌时,计时器都会重置,您还有 28 天的时间刷新令牌到期。 如果您在 28 天内定期获得新的访问令牌,您可以假设无限期地使用相同的刷新令牌。

获取初始访问令牌和刷新令牌的示例 HTTP 请求(用星号编辑的值):

POST /oauth/token HTTP/1.1
Host: podio.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

grant_type=password&username=******&password=******&client_id=******&client_secret=******

响应正文:

{
  "access_token": "******9c2",
  "expires_in": 28800,
  "token_type": "bearer",
  "scope": "global:all",
  "ref": {
    "type": "user",
    "id": ******
  },
  "refresh_token": "******04a"
}

获取新访问令牌的示例请求(使用相同的刷新令牌):

注意:请求正文中任何额外的空白字符都可能导致问题。这是我在试验时遇到的问题。

要求:

POST /oauth/token HTTP/1.1
Host: api.podio.com
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache

grant_type=refresh_token&client_id=******&client_secret=******&refresh_token=******04a

响应正文:

{
  "access_token": "******676",
  "expires_in": 28800,
  "token_type": "bearer",
  "scope": "global:all",
  "ref": {
    "type": "user",
    "id": ******
  },
  "refresh_token": "******04a"
}

需要注意的是,刷新令牌的值不会改变,可以重复使用以获得新的访问令牌。


TL;DR - 如果您不使用刷新令牌,它会在 28 天后过期。每当您使用刷新令牌获取新的访问令牌时,刷新令牌的到期计时器都会重置。