当前位置: 首页 > 知识库问答 >
问题:

如何使用Express构建授权使用Spotify API的“客户端凭证流”?

花稳
2023-03-14

我正试图用Node.js和Express编写一个实用程序,它将使用Spotify API。然而,我一直在试图找出使用Express的“客户端凭证流”来获得使用API的访问令牌的最佳方式...

https://developer.spotify.com/documentation/general/guides/authorization-guide/#client-credentials-flow

我做了一些研究,Spotify给出了这个例子(在下面的链接中),但它似乎与正在使用的“请求”库相当过时?

https://github.com/spotify/web-api-auth-examples/blob/master/client_credentials/app.js

我一直在看Axios之类的东西,但我对这一切有点陌生,甚至不知道如何或从哪里看...

共有1个答案

吕嘉赐
2023-03-14

我想通了这一点,这里有一些对我未来可能陷入困境的朋友的帮助(基于谷歌,我看到许多人陷入困境):

    < li>Axios是向Spotify等API服务器发出请求的工具。如果你想倾听和满足请求,Express是你可以使用的工具。这是为我澄清它的链接:

https://stackoverflow.com/questions/62244076/difference-between-express-js-and-axios-js-in-node#:~: text=Axios用于发送,是fetch()的替代方案。

下面是我写的对我有用的代码:

const axios = require('axios');
const qs = require('qs');
require('dotenv').config();

const client_id = process.env.SPOTIFY_API_ID; // Your client id
const client_secret = process.env.SPOTIFY_CLIENT_SECRET; // Your secret
const auth_token = Buffer.from(`${client_id}:${client_secret}`, 'utf-8').toString('base64');

const getAuth = async () => {
  try{
    //make post request to SPOTIFY API for access token, sending relavent info
    const token_url = 'https://accounts.spotify.com/api/token';
    const data = qs.stringify({'grant_type':'client_credentials'});

    const response = await axios.post(token_url, data, {
      headers: { 
        'Authorization': `Basic ${auth_token}`,
        'Content-Type': 'application/x-www-form-urlencoded' 
      }
    })
    //return access token
    return response.data.access_token;
    //console.log(response.data.access_token);   
  }catch(error){
    //on fail, log the error in console
    console.log(error);
  }
}

注意:

  • 请确保在发送之前对授权凭据进行字符串化。不要使用“查询字符串”依赖项。使用较新的“qs”依赖项。工作原理相同。
  • 使用“dotenv”使 Node.js环境变量,以像我一样保护您的敏感数据!当您推送到 GitHub 并将 .env 添加到 .gitignore 文件中要忽略的文件中时,可能会进一步提供帮助!
  • Axios有一些令人困惑的文档,特别是对于像我这样试图将API与此类身份验证流程一起使用的初学者。以下是一些帮助我理解和构建代码的链接(以及许多测试和失败):

https://flaviocopes.com/axios-send-authorization-header/

https://flaviocopes.com/node-axios/

 类似资料:
  • OAuth2 JWT 配置文件引入了将 JWT 用作授权授予和客户端身份验证的可能性。 JWT客户端身份验证功能独立于特定的授权类型,并且可以与任何授权类型一起使用,也可以与客户端凭据授权一起使用。 但是,使用 JWT 授权类型似乎与将客户端凭据授予与 JWT 客户端身份验证结合使用完全相同,只是语法略有不同。 在这两种情况下,客户端都会联系令牌终结点以获取访问令牌: vs

  • 快速入门展示了使用 IdentityServer 保护 API 的最基础的场景。 在这个场景中,我们定义一个 API,同时定义一个 想要访问这个 API 的 客户端。客户端将从 IdentityServer 请求获得一个访问令牌,然后用这个令牌来获得 API 的访问权限。 定义 API 范围(Scopes)用来定义系统中你想要保护的资源,比如 API。 由于当前演练中我们使用的是内存配置 —— 添

  • 是否可以使用内置的身份验证/授权选项保护Azure中应用服务中的Web API,同时使用OAuth客户端凭据授予流访问它? 我有一个应用服务正在通过Azure ADB2C进行身份验证。在该B2C租户中,我注册了Web应用/API,并且身份验证工作正常,可以使用该Web应用。我在该ADB2C应用的已发布范围部分中添加了一个范围,并为该范围添加了一个应用ID URI。然后,我在租户中创建了另一个应用(

  • 直截了当的问题,希望有一个直截了当的答案。我试图使用request通过Node.js实现客户端凭证流。这是我的代码 无论我做什么,响应体总是 我尝试过使用 curl 提出请求,结果相同。 这意味着这是凭据的问题。我肯定为我的应用程序使用了正确的客户端ID和客户端秘密,这让我相信是编码导致了问题。 我的编码正确吗?如果是这样,还有什么原因呢?

  • 我有一个用VB编写的旧windows应用程序。NET与SQL server后端。目前,新用户的添加、删除、添加权限等由旧的审批工作流系统管理。获得批准后,用户详细信息和权限将手动插入到SQL server数据库表中。 我正在尝试将此应用程序与SailPoint的身份和访问管理集成。因此,新用户的添加、删除更新和添加权限等将通过Sailpoint完成。为此,我需要创建一个可由Sailpoint调用的

  • 我需要从Java代码中调用REST调用。 我有以下形式的证书 id 安全密钥 提供的算法 > 获取服务器时间 使用Id、安全密钥 现在授权在下面的表格 需要一个java客户端程序使用上述授权标头调用此REST调用。 我正在得到 HTTP响应401错误。 请提供在请求表单中设置授权标头的正确方法 代码: 错误: sun.net.www.protocol.http.IOException:服务器返回H