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

已获取Spotify access_token仍触发401错误(Python)

问题原因与解决方案

核心问题

client_credentials授权模式获取的token不具备访问用户个人数据的权限。这个模式是给应用自身使用的,仅能调用无需用户身份的公开接口(比如搜索歌曲、获取专辑信息),而/v1/me接口需要识别具体用户身份,必须使用Authorization Code Flow(后端适用)或Implicit Grant Flow/PKCE模式(前端JS适用)这类用户级授权模式。

具体解决步骤

1. 切换授权模式

  • 后端Python:采用Authorization Code Flow,流程为:
    1. 引导用户跳转至Spotify授权页面,获取授权码
    2. 用授权码+Client ID+Client Secret兑换包含用户身份的access_token
  • 前端JavaScript:使用Implicit Grant Flow(或更安全的Authorization Code Flow with PKCE),直接在前端获取带用户身份的token

2. 确认权限范围

申请授权时必须指定所需权限scope,比如user-read-private、user-read-email,否则即便拿到用户级token,调用/v1/me仍会返回401。

3. Python代码示例

import requests

# 假设已通过用户授权拿到code
client_id = "你的Client ID"
client_secret = "你的Client Secret"
redirect_uri = "你在开发者后台配置的回调地址"
code = "用户授权后返回的code"

# 兑换用户级access_token
token_url = "https://accounts.spotify.com/api/token"
payload = {
    "grant_type": "authorization_code",
    "code": code,
    "redirect_uri": redirect_uri,
    "client_id": client_id,
    "client_secret": client_secret
}
response = requests.post(token_url, data=payload)
token_data = response.json()
user_access_token = token_data["access_token"]

# 调用/v1/me接口
headers = {"Authorization": f"Bearer {user_access_token}"}
me_response = requests.get("https://api.spotify.com/v1/me", headers=headers)
print(me_response.json())

4. 常见排查点

  • 确保回调地址与Spotify开发者后台配置的完全一致(包括协议、端口、路径)
  • 授权时必须包含所需的用户信息权限scope
  • 禁止混用不同授权模式的token,client_credentials生成的token永远无法访问用户个人接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:20:32