如何解决使用MusicKit调用个人库接口时的403 Forbidden错误
Apple Music个人库API 403 Forbidden错误排查与解决
问题回顾
你通过Python生成JWT服务器令牌,调用Apple Music目录API正常,但请求个人库/v1/me/library/albums时返回403错误,错误信息为Invalid authentication。当前使用的Music-User-Token(MUT)是从P8密钥文件中获取的,希望后续上架App Store供其他用户使用,不想依赖个人专属令牌。
核心错误原因
- MUT来源误用:P8密钥是生成服务器端JWT令牌(即你代码中的
token)的凭证,并非MUT。MUT是与用户Apple Music账号绑定的授权令牌,必须通过用户OAuth2授权流程获取。 - 请求头格式错误:你的curl命令中
Music-User-Token字段多了Bearer前缀,正确格式应为Music-User-Token: {MUT},不需要额外添加Bearer。
解决方案与说明
1. 正确获取MUT
- 开发测试阶段:
可通过个人Apple账号获取测试用MUT:在iOS测试App中调用SKCloudServiceController.requestUserToken(forDeveloperToken:completionHandler:)接口,获取与你账号绑定的MUT,将其复制到Python脚本中即可测试个人库API。该令牌仅能访问你的个人库,适合开发调试。 - 上线后供用户使用:
必须实现完整的Apple Music OAuth2授权流程:引导用户跳转至Apple登录授权页面,用户授权后你会拿到授权码,再用授权码兑换成MUT(含刷新令牌,用于续期)。此流程需在Apple开发者后台配置应用回调URL等信息。
2. Python中认证与请求的调整
修正curl命令格式
将个人库请求的curl命令修改为:
curl -v -H 'Music-User-Token: {正确的MUT}' -H 'Authorization: Bearer {你的JWT令牌}' "https://api.music.apple.com/v1/me/library/albums"
Python直接发起请求示例(使用requests库)
import datetime import jwt import requests secret = """ -----BEGIN PRIVATE KEY----- {Insert Private Key Here} -----END PRIVATE KEY----- """ keyId = "{Insert KeyID Here}" teamId = "{Insert TeamID Here}" alg = "ES256" time_now = datetime.datetime.now() time_expired = datetime.datetime.now() + datetime.timedelta(hours=4320) # 180天有效期 headers = { "kid": keyId, "alg": alg } payload = { "iss": teamId, "iat": int(time_now.timestamp()), # 用timestamp()替代strftime更可靠 "exp": int(time_expired.timestamp()) } if __name__ == "__main__": # 生成服务器JWT令牌 token = jwt.encode(payload, secret, algorithm=alg, headers=headers) # 替换为通过授权获取的有效MUT valid_mut = "{你的测试/用户授权MUT}" # 发起个人库请求 library_url = "https://api.music.apple.com/v1/me/library/albums" request_headers = { "Authorization": f"Bearer {token}", "Music-User-Token": valid_mut } response = requests.get(library_url, headers=request_headers) print(response.status_code) print(response.json())
3. 开发初期测试注意事项
- 无需提前部署应用,只要你的开发者账号开通了MusicKit权限,即可用测试MUT调用个人库API。
- 测试用MUT有效期有限,过期后需重新获取。
内容的提问来源于stack exchange,提问作者tlcs30
相关产品推荐
相关产品推荐

