是否可以使用 Spotify Web API 编写没有回调 URI 的桌面应用程序?

Posted

技术标签:

【中文标题】是否可以使用 Spotify Web API 编写没有回调 URI 的桌面应用程序?【英文标题】:Is it possible to use the Spotify Web API to write a desktop application without a callback URI? 【发布时间】:2015-09-14 13:35:29 【问题描述】:

我想编写一个简单的个人使用桌面应用程序,它使用 Spotify Web API 来构建播放列表。

据我所知,如果不提供我没有的回调 URI,就无法使用 API,因为我没有任何类型的域或服务器(除了我的个人电脑)。

有没有办法在没有 URI 的情况下使用 API?

如果不是,那么设置回调 URI 的最佳方式是什么?我没有太多使用 Web 应用程序或客户端/服务器的经验,而且我过去使用的 API 不需要任何类型的回调。

【问题讨论】:

【参考方案1】:

先了解一下背景,这个答案比我预期的要长一些。

您需要一个访问令牌。有三种方法可以获取访问令牌;身份验证代码流、客户端凭据流和隐式授予流。这些都是 oAuth 2.0 规范的一部分,每个都有自己的用途。

由于您要修改用户的帐户,因此您需要获得该用户的许可。现在,如果您没有执行任何需要用户权限的操作,您可以使用客户端凭据流。这可能是最容易学习的流程,因为它只需要从您的服务器到 Spotify 的服务器的请求,并且响应包含访问令牌。不需要回调/重定向 URI。

我相信您已经阅读过,身份验证代码流程和隐式授权流程都需要回调 URI。这是因为包含用户的流程和回调 URI 是 Spotify 在用户在 Spotify 网站上输入密码后重定向用户的位置。

身份验证代码流程和隐式授权流程各有利弊。可以刷新通过身份验证代码流检索到的访问令牌,但两者都返回有效期为一小时的令牌。这意味着使用隐式授权流进行身份验证的用户必须在一小时后重新进行身份验证。但是,身份验证代码流确实需要一些后端工作,因为它需要发出请求以交换从 Spotify 的服务器提供的代码以获取访问令牌。隐式授予流程更直接 - 您获得访问令牌然后就可以离开了。

回调 URI 可以是本地主机地址,因此如果您的桌面应用程序要在本地启动 Web 服务器,您可以在运行应用程序的同一台机器上处理回调。 (最好不要在端口 80 上运行 Web 服务器,因为它可能被其他东西使用。)

Github 上提供了每个身份验证流程的框架代码,请参阅web-api-auth-examples。在我们的Authorization Guide 中阅读有关流程的更多信息。如果您选择在用户计算机上运行 Web 服务器,我建议您使用隐式授予流程,因为它不包括任何服务器到服务器的请求,因此您不必暴露您的 client_secret 暴露在代码。 (与授权码流程相反。)

另外,由于您使用 Python 进行编码,我建议您查看 spotipy,它是一个围绕 Web API 的包装器,其中包含可以节省您一些时间的便捷方法。如果您确实继续使用 Implicit Grant 流程,您应该查看具有类似目的的 spotify-web-api-js。请注意,使用 Web API 完全不需要这些包装器,但它们会让您的生活更轻松。

【讨论】:

你好,如果我想的话。使用范围 =“编辑用户的私人播放列表”运行请求,而不必为用户显示登录表单,也不必在表单中允许用户使用该范围,这可能吗?基本上,是否有一种自动方式绕过登录并允许用户使用范围,而无需用户单击或任何无显示的网络浏览器技巧?我已经有了从 Spotify 的开发者后台管理生成的用户 ID 和密码... 不,这违背了 oAuth 的目的,因为任何应用程序都可以在未经许可的情况下修改任何用户的资源。 感谢您的回答。是否可以在 Spotify 中使用当前的 Web API 或一些尚未公布的高级企业 API 来管理大量具有特定分组的播放列表,以便在多个外围设备上在线/离线播放它们? ...我特别想绕过这个 OAuth“单击以允许范围”用户步骤,为什么不获取单点 API,不需要“真实”用户帐户,并具有高级控制...以前的 libspotify API 有没有“单击以允许范围”用户步骤,但此 API 将被弃用...

以上是关于是否可以使用 Spotify Web API 编写没有回调 URI 的桌面应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

使用 spotify api 控制 spotify web player sdk 的播放状态

Spotify web-api 暂停事件监听器

Spotify Web API 授权错误

验证 spotify web api 不起作用

spotify-web-api-node:authorizationCodeGrant() 给出 400 - 错误请求

Spotify API Web:没有 Node.js 的 OAuth