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

Is it possible to use the Spotify Web API to write a desktop application without a callback URI?

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

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

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

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

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

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

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

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

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

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

Github 上提供了每个身份验证流程的框架代码,请参阅 web-api-auth-examples. Read more about the flows in our Authorization Guide。如果您选择 运行 用户计算机上的 Web 服务器,我建议您使用隐式授权流程,因为它不包含任何服务器到服务器的请求,因此您不必公开您的 client_secret暴露在代码中。 (与授权码流程相反。)

此外,由于您在 Python 中编写代码,我建议您查看具有类似目的的 spotipy, a wrapper around the Web API packed with convenient methods that'll save you some time. If you do go ahead with the Implicit Grant flow, you should have a look at spotify-web-api-js。请注意,使用 Web API 根本不需要这些包装器,但它们会让您的生活更轻松。