api - 无法识别 Spotify API 范围 - 无法访问用户信息
问题描述
我目前正在实现一项功能,您可以保存在我的 iOS 应用程序(用 Swift 编写)上显示的歌曲,并且此保存按钮允许将歌曲附加到用户的 Spotify 库中。根据 Spotify 开发人员指南,此功能所需的唯一范围是user-library-modify
在向用户授权应用程序时。要打开的网址是这样的:
这一切都很完美 - 打开 url 以供用户批准我的应用程序可以进行的更改,并且带有所需代码的回调 url 在打开的 url 中。
执行所需功能的下一步是获取确切的令牌以使用 api,这是通过调用 url 完成的:
使用此 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)添加许多其他范围(尽管这显然不是针对问题的)
如果有人知道我做错了什么或对我应该尝试什么有任何建议,我将感谢任何有用的回复!
解决方案
我发现了我的错误。我在 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
set asrefresh_token
并将code
参数设置为先前获得的refresh_token
5) 你现在有了下一个 access_token 和 refresh_token
6)重复步骤4-5直到无穷大
推荐阅读
- python - 在 `tf.estimator` 中,如何在训练结束时(不是在每次迭代中)`tf.assign` 一个变量?
- php - 首屏内容
- laravel - V8Js::compileString():14026: ReferenceError: window is not defined
- c++ - 如何正确地将对象/指针存储到 Qlist
- proxy - 代理通过在 elm-package.json 中设置它来停止在生产服务器上工作
- load-testing - 我正在尝试使用 Jmeter 执行移动负载测试,但我在结果树中收到 401 错误
- php - 如何在 WordPress 功能中获取当前国家名称和状态
- c - 编译时未使用的参数和控件到达非空函数错误的末尾 - CS50 pset3 - 音乐
- ruby-on-rails - Rails 路由:as-block 和 device_for 块
- python - 如何在 SQLAlchemy 的连接表中聚合不同的值?