我当前正在实现一项功能,您可以保存在我的iOS应用程序(用Swift编写)中显示的歌曲,并且该保存按钮允许将歌曲添加到用户的Spotify库中。根据Spotify开发人员指南,与用户授权应用程序时,此功能唯一需要的范围是user-library-modify
。要打开的网址是这样的:
这一切都很完美-打开url供用户批准我的应用程序可以进行的更改,并打开包含所需代码的回调url。
执行所需功能的下一步是获取确切的令牌以使用api,这是通过调用url完成的:
使用此网址,将返回一个带有新令牌和相关信息的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)添加了许多其他作用域(尽管这显然不能解决问题)
如果有人知道我在做什么错或对我应该尝试的方法有任何建议,我将感谢您的帮助!
答案 0 :(得分:0)
我发现了我的错误。我在URL中输入的grant_type设置为client_credentials
。但是,这种访问Web API的方法仅允许使用公共可用数据,而不允许用户信息。因此,此授权方法不接受参数scope
,从而迫使Spotify帐户服务忽略此附加参数。其他选项允许访问用户数据,它们是:
authorization_code
和refresh_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,直到无穷大