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

时间:2018-08-14 13:08:45

标签: api url authorization token spotify

我当前正在实现一项功能,您可以保存在我的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。

执行所需功能的下一步是获取确切的令牌以使用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

使用此网址,将返回一个带有新令牌和相关信息的json文件,但是当查看令牌具有的允许范围时,该文件为空:

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

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

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

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

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

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

3)添加了许多其他作用域(尽管这显然不能解决问题)

如果有人知道我在做什么错或对我应该尝试的方法有任何建议,我将感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我发现了我的错误。我在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,直到无穷大

相关问题