Spotify Api 有一个 authorize users 选项,我目前正在使用它。授权完成后,您将收到一个身份验证令牌,可将其兑换为访问令牌和刷新令牌。在我的用例中,访问令牌将发送到使用 /me
调用请求用户详细信息的后端,之后将根据 Spotify 数据创建或登录用户。 Spotify ID(在响应中)将用于在我的后端创建用户,因此基本上您的 Spotify ID 与后端的帐户相关联。
我目前面临的问题如下:为了获取用户的 Spotify ID,后端必须进行 /me
调用。这并不理想,因为 Spotify 有速率限制,可以通过这种方式轻松触发。通常,当您使用 OAuth 进行身份验证时,您会收到一个 JWT 令牌,其中包含数据,可能是一个 id。您还可以使用您的公钥/私钥验证 JWT 令牌是否已被篡改。在 Spotify 的情况下,我们收到的不是 JWT 令牌,而是通用令牌。我似乎无法找到如何从令牌中获取任何信息,我只是不知道。我尝试过 Base64 解码它,然后 AES(以及 DES 和 TripleDES 以及 Rabbit 和 RC4)使用公钥/私钥对其进行解密,但没有检索到有用的数据。我找不到任何关于如何从中获取任何数据的信息,似乎还没有人尝试过..
Auth0 有一个 Spotify integration,他们也(从我所见)在后端使用 /me
调用。我想他们正在使用代理或类似的工具来绕过速率限制,但这暂时不适用。我预见的问题是来自互联网的任何 Spotify 令牌都可能登录到我的后端,因为我无法验证是否已使用我的客户端 ID 创建了令牌...
希望 StackOverflow 上的一些陌生人知道答案,或者知道如何提供帮助,我列出了我检索到的所有公钥/私钥和响应(注意:这些是测试密钥,不是我的应用程序的密钥 ?) :
Client ID: 6577d59d8dd643d5b2e53b25b0d5211e
Client Secret: c04640db6312400c9611229a81e65c6b
Authorization code: AQAGm98h91D9AsvavJXAL_V5DK-r6BtybDPbg7B31vZocO7TjOXqLQwhVSOmrHViXkippOPFjtrNjEjCQG6D0n1ImYbFXaTUNYGK4uIaeqqUdGne-KTZBE3MmBUP0iagpCY5HVjtTnty2FnL_JjD1a6omPAvSqTds1iexV6a
Access Token: BQAdbMy4Dhj0VCfnFS_VcEgjmMHBb9Sekjcal5F8T9HaXb7zIJjtsIRgjuzp4x3SGvAXgBw1NWdURSGGGHP5wPSU0Baqc9Zz4b5AvPGOX6aZy6w5c15GktTT_bvB-3wA3rfOqjYsrAGuzHuqxz0simNcYiQNiIyuhw
Refresh Token: AQApR35msEEcgq0pH7TWPXefcA8bHvc2rApA-mxRAuPo3QJVu5ksZMJMmh4jXy6USj2napzrZ9bJijVbkpZpgzPE8js-i-e9f7vVO0INnp-Q3P_gt3MIQ-4AbQ8eDBXORmw
TL;DR:
如何从 Spotify 访问令牌中获取数据,可能使用客户端 ID/客户端密钥?
因为我想不出(这就是问题)验证令牌的任何方式,所以任何 Spotify 令牌都可用于在我的后端创建帐户,而不仅仅是使用我的客户端 ID 创建的令牌。
答案 0 :(得分:0)
如果您尝试在自己的 API 中使用外部访问令牌,这是一个常见问题。此类访问令牌仅适用于 Spotify API,不适用于您自己的 API。
访问令牌格式可能是参考令牌,它使用的声明只能通过 OAuth 内省检索,我怀疑您是否有权执行该操作。
正确的方法
这听起来可能很复杂,但所有安全细节都从您的 UI 和 API 中具体化了,因此代码很简单。我的 blog post 有关于该模式的更多详细信息。