【问题标题】:How to retrieve data from the Spotify Access Token and how to verify the Access Token如何从 Spotify 访问令牌中检索数据以及如何验证访问令牌
【发布时间】:2021-03-05 00:58:40
【问题描述】:

Spotify Api 有一个authorize users 选项,我目前正在使用它。授权完成后,您将收到一个 Authentication Token,可用于交换 Access Token 和 Refresh Token。在我的用例中,访问令牌将被发送到使用/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 创建的令牌。

【问题讨论】:

    标签: authentication oauth-2.0 oauth jwt spotify


    【解决方案1】:

    如果您尝试在自己的 API 中使用外部访问令牌,这是一个常见问题。这种类型的访问令牌仅适用于 Spotify API,而不是供您自己的 API 使用。

    访问令牌格式可能是一个引用令牌,它使用的声明只能通过 OAuth 内省检索,我怀疑您是否有权执行该操作。

    正确的方法

    • 您提供授权服务器 (AS),例如 Auth0
    • 用户可以通过多种方式登录,其中之一是 Spotify
    • 要让用户登录,您的应用首先会重定向到您的 AS,然后再重定向到用户进行身份验证的 Spotify
    • Spotify 向您的 AS 颁发令牌,然后 AS 向您的 UI 颁发自己的令牌
    • 您的 UI 将令牌发送到您的 API,并且 API 完全控制处理令牌以及其中的任何标识符/声明/范围

    这听起来可能很复杂,但所有的安全细节都是从您的 UI 和 API 外部化的,因此代码很简单。我的blog post 有更多关于该模式的详细信息。

    【讨论】:

    • 是的,我也是这么想的,他们可能有自己的格式,不允许外人阅读。在我的用例中,一切都围绕 Spotify 帐户发展,因此我不希望有另一种登录方式。在您提到的步骤中,任何令牌(不是由我的客户端 ID 创建的)都可以发送用户的有效令牌从“UI”到服务器,这是不幸的。我明白,我只是希望有另一种方式,比如验证令牌或 Spotify 的端点来验证它..
    • 颁发访问令牌的标准方法是为客户端提供访问令牌的受众,例如“api.mycompany.com”,并且您还可以控制令牌签名密钥。这意味着任何恶意客户端都没有正确的令牌,因此在调用您的 API 时会收到 401。当然,如果您使用 Spotify 访问令牌调用您自己的 API,这些保证就会丢失。
    • 是的,确实,我习惯于使用 JWT 令牌与观众,或任何验证令牌已使用私钥创建的选项(并且可以使用公钥进行验证)。这些确实丢失了,我希望那里有人知道有关 Spotify 令牌的更多具体信息(也许它确实有一个结构),我不想更改登录方法。
    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 2015-11-11
    • 2012-01-26
    • 2016-09-04
    • 2022-10-15
    • 1970-01-01
    • 2015-07-16
    • 2017-02-14
    相关资源
    最近更新 更多