过期后无法刷新令牌

ipl*_*gos 5 ruby oauth soundcloud

我可以验证并获取 access_token 和相应的 refresh_token 很好(后续 API 交互也很好)。

但是,我似乎只能在实际到期之前刷新令牌(POSTto /oauth/tokenwith grant_type=refresh_token)。到期后,相同的刷新代码(与文档中提供的完全相同)返回.access_tokeninvalid_grant

我使用的是 soundcloud-ruby SDK,FWIW,但我可以通过 curl 重现它。

顺便说一句,我发现来自 Google Group 的一些旧消息提到我可以请求一个非过期令牌,但我在文档中的任何地方都没有看到这一点。这仍然是一个可行的选择吗?

Pau*_*man 2

那是对的。访问令牌过期后,刷新令牌将无法使用。

scope=non-expiring您可以通过在构建授权 URL 时指定来请求未过期的访问令牌。要使用 Ruby SDK 执行此操作,只需将附加参数传递给该authorize_url方法即可:

require 'soundcloud'

client = Soundcloud.new(
  :client_id => 'YOUR_CLIENT_ID',
  :client_secret => 'YOUR_CLIENT_SECRET',
  :redirect_uri => 'REDIRECT_URI'
)

client.authorize_url(:scope => 'non-expiring')
Run Code Online (Sandbox Code Playgroud)

流程的其余部分应该完全相同(从查询字符串中获取“code”参数并向 发出请求POST/oauth2/token

  • 如果刷新令牌在过期后无法用于请求访问令牌,那么它在 SDK 中的用途是什么?根据我在 Oauth RFC 中收集到的信息,刷新令牌的明确意图是允许再次获取访问令牌,而无需用户重新授权。 (7认同)
  • 这是不正确的:使用 google Oauth2,如果令牌过期,您可以刷新令牌 (2认同)