我目前正致力于Podio整合工作,我偶然发现了一些文章,这些文章没有给出明确的答案,无论refresh_token是否过期,以及在这种情况下获取新刷新令牌的确切流程是什么。
文章:
Podio Refresh token Expiry - 它没有过期(用户名中有Podio的人回答,最近)
https://help.podio.com/hc/en-us/community/posts/206669587-Get-new-refresh-token - 它过期了,你把它作为回应的一部分而不是狡猾的?有一些讨论没有结论
我问这个是因为我使用了很多服务和OAuth实现,但它是第一次刷新令牌实际上变得无效。那么如果28天过去了那么用户必须重新认证?或者只是令牌无效但“授权”仍然存在?我不得不说它很混乱,因为我习惯于接近grant ==刷新令牌,但我理解它与OAuth规范有关。 另外我们只想在db中存储刷新令牌。 我很想测试它,但我不想等待28天。
文档没有明确说明刷新令牌的生命周期是什么。
我喜欢Podio的某个人给出明确的答案。刷新令牌是否过期,只有当完全不活动(没有api调用)或只是固定数量时,以及在什么情况下(不活动或时间过去),获取刷新令牌的确切流程是什么,它是否需要用户重新认证?
答案 0 :(得分: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天后过期。每当您使用刷新令牌获取新的访问令牌时,刷新令牌的到期计时器都会重置。