You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spotify API刷新令牌请求未返回refresh_token问题排查

Spotify刷新令牌请求成功但未返回refresh_token的原因分析

我在令牌过期后,使用以下TypeScript代码调用Spotify API获取新令牌:

const buffer = Buffer.from(
  `${String(CLIENT_ID)}:${String(CLIENT_SECRET)}`
).toString("base64");

const params: Record<DataParamName, string> = {
  grant_type: "refresh_token",
  refresh_token: String(refresh_token),
};

const data = new URLSearchParams(params).toString();

const result = await axios({
  method: "post",
  url: "https://accounts.spotify.com/api/token",
  data,
  headers: {
    "content-type": "application/x-www-form-urlencoded",
    Authorization: `Basic ${buffer}`,
  },
});

请求成功,但返回结果如下:

{
  "access_token": "BQBok7CuDi0nYQ041YUStlbvDNbTzJzGbKax52JQcCeOIxqOijonqR8RTqxNhjgW0XYZkSolrYihkUsLxJV5L-L-x6Mv4MBngd7kZihvfZYXuPUG3DLV1Wx_j7Tki3pZe5Pjfo4bRt2rLnFTiR8ZjZxXu5slzofTtFVtw3DGKofyWdLj6VKfzIl_aOvVgqXEozgUF4qRwpA3v5zLbkyhYqCJDBUYJUjBrwTGrA",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "playlist-read-private user-follow-read user-read-email user-read-private"
}

由于返回结果中缺少refresh_token,导致下次请求新令牌时无法正常执行,请问可能存在哪些错误?


可能的原因:

  • 初始授权未包含offline_access权限:Spotify的refresh_token仅在首次用户授权时返回,前提是你在授权请求里添加了offline_access这个scope。后续用refresh_token刷新access_token时,API不会再返回新的refresh_token,你必须妥善保存第一次拿到的那个refresh_token,它会一直有效直到用户主动撤销对你应用的授权。
  • 误解了Spotify的令牌刷新机制:Spotify的API设计就是如此——刷新令牌的响应里不会附带新的refresh_token。你不需要每次刷新都获取新的refresh_token,复用首次授权得到的那个即可。
  • 用错了授权流程:如果你的应用采用的是隐式授权流程(Implicit Grant Flow),这种流程本身就不支持refresh_token,只有授权码流程(Authorization Code Flow)才会返回refresh_token并支持离线访问。检查你初始的授权流程是否正确。

内容的提问来源于stack exchange,提问作者user3887366

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:30:41