无法识别 Spotify API 范围 - 无法访问用户信息

Posted

技术标签:

【中文标题】无法识别 Spotify API 范围 - 无法访问用户信息【英文标题】:Spotify API scopes not being recognized - not able to access user info 【发布时间】:2019-01-21 08:40:36 【问题描述】:

我目前正在实现一项功能,您可以保存在我的 ios 应用程序(使用 Swift 编写)上显示的歌曲,并且此保存按钮允许将歌曲附加到用户的 Spotify 库中。根据 Spotify 开发者指南,在向用户授权应用程序时,此功能所需的唯一范围是 user-library-modify。要打开的网址是这样的:

https://accounts.spotify.com/authorize/?client_id=my_client_id&response_type=code&scope=user-library-modify&redirect_uri=http://my_redirect_uri

这一切都很完美 - 打开 URL 以供用户批准我的应用程序可以进行的更改,并且带有所需代码的回调 URL 在打开的 URL 中。

执行所需功能的下一步是获取确切的令牌以使用 api,这是通过调用 url 完成的:

https://accounts.spotify.com/api/token?grant_type=client_credentials&client_id=my_client_id&client_secret=my_client_secret&response_type=code&redirect_uri=http://my_redirect_uri&code=the_code_I_just_retrieved

使用此 url,将返回一个带有新令牌和信息的 json 文件,但是在查看令牌所具有的允许范围时,它是空的:

["scope": , "token_type": Bearer, "access_token": the_token_string, "expires_in": 3600]

另外,当我仍然尝试执行它返回的请求时:

["error": message = "Insufficient client scope"; status = 403; ]

在这个漫长的过程中,我做错了什么?如果您想知道,这里有一些我尝试过但没有成功的事情:

1) 重新列出显式令牌请求中的范围

2) 将 utf-8 编码添加到重定向 uri(不确定这是否会改变任何内容)

3)添加许多其他范围(尽管这显然不是针对问题的)

如果有人知道我做错了什么或对我应该尝试什么有任何建议,我很感激任何有用的回复!

【问题讨论】:

【参考方案1】:

我发现了我的错误。我在我的 url 中输入的grant_type 设置为client_credentials。但是,这种访问 Web API 的方法只允许使用公开可用的数据,而不是用户信息。因此,这种授权方式不接受参数scope,强制spotify账号服务忽略这个附加参数。其他选项确实允许访问用户数据,它们是:

authorization_coderefresh_token

现在必须这样做的方法是:

1) 定期授权用户(提供范围)检索初始授权码

2) 然后,使用此代码发出令牌请求,但将 grant_type 指定为 authorization_code

3) 然后您收到一个有效的access_token,有效期为一小时和一个refresh_token

4) 必要时使用access_token,当此令牌过期时,再次发出令牌请求,但这次将grant_type设置为refresh_token,并将code参数设置为之前获得的refresh_token

5) 你现在有了下一个 access_token 和 refresh_token

6) 重复步骤 4-5 直到无穷大

【讨论】:

以上是关于无法识别 Spotify API 范围 - 无法访问用户信息的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Spotify API 获取访问令牌

无法使用 Spotify API 进行授权

无法再访问基本的 Spotify API 数据

无法在 Spotify Apps API 中获取艺术家的专辑

Spotify API php - 无法请求数据并获取访问令牌

如何使用 Spotify Web API 获取当前播放/最近播放的歌曲