Spotify授权代码(不是访问令牌)即将到期 - 我该如何规避?

时间:2017-07-17 03:18:11

标签: python python-requests spotify

我正在开发一个应用程序,为已获得相应授权的用户创建公共Spotify播放列表。

我正在使用Flask和Python请求库来完成此任务,但在我发送了几个连续的POST请求以从Spotify获取访问令牌(使用从先前逻辑获得的授权代码)之后,它开始失败。我指的是来自此链接的授权代码流程的第4步:https://developer.spotify.com/web-api/authorization-guide/#authorization_code_flow

我知道授权代码是有效的,因为它在我运行请求的前几次没有失败(可能是5-10次)。

当我从POST打印响应时,我得到以下内容: {'error_description':'授权代码已过期','错误':'invalid_grant'}

我假设我没有足够快地使用授权代码来获取访问令牌(在访问令牌POST请求之前反复失败代码逻辑之后,我猜?)但是我应该如何重置和刷新授权代码呢我可以反复提出请求吗?关于我被禁用了多长时间以及通常良好的编程习惯以避免这种情况的任何信息?

我对HTTP请求很新,并感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:0)

当您使用授权码获取访问令牌时,您还将在同一消息中获得刷新令牌。当访问令牌过期时,使用该刷新令牌来请求新的访问令牌。

如何使用刷新令牌写在您链接到的同一页面上,稍微向下:https://developer.spotify.com/web-api/authorization-guide/#request-access-token-from-refresh-token

我同意这不是最容易理解的,但所有这些都有很好的理由。它也是一个名为OAuth2的标准,许多网站都使用它来授权用户访问他们的数据,因此它在很多地方都很有用。

在这种特殊情况下:"为什么我需要一个刷新令牌来获取访问令牌,我已经有一个授权码来获取访问令牌?",这是因为授权码泄露了因为它是通过用户的浏览器返回给你的。

答案 1 :(得分:0)

当用户授予第三方应用程序(客户端)的权限时,将获取授权代码。根据OAuth的2.0规范,授权代码必须使用一次,并建议其最长生命周期为10分钟,以缓解安全漏洞。

在此处详细了解授权码: https://tools.ietf.org/html/rfc6749#section-4.1.2

另一方面,客户端应用程序的服务器端可以使用刷新令牌来请求新的令牌,而不是让用户无聊再次通过所有OAuth 2.0舞蹈(以进行身份​​验证和授予权限) 39;过期了。

有关刷新令牌的更多信息,请参阅OAuth 2.0规范的10.4节。 https://tools.ietf.org/html/rfc6749#section-10.4