1

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

文章:

Podio 刷新令牌过期- 它不会过期(来自用户名中有 Podio 的人的回答,最近的)

https://help.podio.com/hc/en-us/community/posts/206669587-Get-new-refresh-token - 它已过期,您将其作为响应的一部分而不是 rly?有一些没有结论的讨论

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

文档没有明确说明刷新令牌的生命周期。

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

4

1 回答 1

5

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

访问令牌在通过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 天后过期。每当您使用刷新令牌获取新的访问令牌时,刷新令牌的到期计时器都会重置。

于 2017-01-19T16:07:53.983 回答