我想编写一个供个人使用的简单桌面应用程序,它使用Spotify Web API构建播放列表。
据我所知,如果没有提供回调URI,我就无法使用API,而我没有,因为我没有域名或任何类型的服务器(我个人电脑除外)。
有没有办法在没有URI的情况下使用API?
如果没有,设置回调URI的最佳方法是什么?我在使用网络应用程序或客户端/服务器方面没有太多经验,而且我过去使用的API也不需要任何回调。
答案 0 :(得分:3)
首先,有些背景,这个答案比我预期的要长一些。
您需要一个访问令牌。有三种方法可以检索访问令牌;身份验证代码流,客户端凭据流和隐式授权流。这些都是oAuth 2.0规范的一部分,每个规范都有自己的用途。
由于您要修改用户的帐户,因此您需要该用户的许可。现在,如果您没有执行任何需要用户权限的操作,则可以使用Client Credentials流。这可能是最容易学习的流程,因为它只需要服务器向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的包装,其中包含方便的方法,可以节省您一些时间。如果您继续使用隐式授权流程,您应该查看具有类似用途的spotify-web-api-js。请注意,这些包装器根本不需要使用Web API,但它们会让您的生活更轻松。