为了账号安全,请及时绑定邮箱和手机立即绑定

查询 Spotify 的 Web API 客户端凭证流

查询 Spotify 的 Web API 客户端凭证流

阿波罗的战车 2023-03-24 14:41:51
我正在尝试根据https://developer.spotify.com/documentation/general/guides/authorization-guide/#client-credentials-flow Client Credentials Flow上的文档发出 http 请求。我写过const BASE_URL = 'https://accounts.spotify.com/api/token';fetch(BASE_URL, {            method: 'POST',            headers: {                'Content-Type': 'application/x-www-form-urlencoded',                'Authorization': 'Basic ' + base64(clientID) + ':' + base64(clientSecret)            },            body: JSON.stringify({'grant_type:client_credentials'})        })这是否按照它所说的去做?我很困惑如何编写发布请求的正文。
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

我最终做了哪些工作:


async authorize(){

        let myHeaders = new Headers();

        myHeaders.append("Authorization", `Basic ${my_clientID:clientSecret}`);

        myHeaders.append("Content-Type", "application/x-www-form-urlencoded");


        var urlencoded = new URLSearchParams();

        urlencoded.append("grant_type", "client_credentials");


        const requestOptions = {

        method: 'POST',

        headers: myHeaders,

        body: urlencoded,

        redirect: 'follow'

        }

        

        let res = await fetch("https://accounts.spotify.com/api/token", requestOptions);

        res = await res.json();

        return res.access_token; 

    }


async search(){

        const access_token = await this.authorize();

        this.setState({access_token});

        const BASE_URL = 'https://api.spotify.com/v1/search';

        let FETCH_URL = `${BASE_URL}?q=${this.state.query}&type=artist&limit=1`; 

        const ALBUM_URL = 'https://api.spotify.com/v1/artists';


        let myHeaders = new Headers();

        myHeaders.append("Authorization", `Bearer ${access_token}`);

        

        const requestOptions = {

            method: 'GET',

            headers: myHeaders

        }


        let res = await fetch(FETCH_URL, requestOptions);

        res = await res.json();

        console.log("ARTIST", res);

}


查看完整回答
反对 回复 2023-03-24
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

从您共享的链接中,客户端凭证流是向 spotify API 服务器发出请求的客户端(服务器端)。因此,这是一个服务器到服务器的身份验证流程(不是授权)。您正在使用客户端的 fecth API,这意味着您的实现应该是服务器端的。如果您使用的是 node.js 运行时服务器端框架,只需查找即可在http.request API服务器端发出请求。

例如,这将是一个纯 node.js 实现:

const options = {

   hostname: 'https://accounts.spotify.com/api/token',

   method: 'POST',

   headers: {

     'Content-Type': 'application/x-www-form-urlencoded',

     'Authorization': 'Basic ' + base64(clientID) + ':' + base64(clientSecret)

   }

 };


 const req = http.request(options, (res) => {

   res.setEncoding('utf8');

   // process the data bit by bit or in chunks...

   res.on('data', (chunk) => {});

   // ...and do something with it when there is no more data in response

   res.on('end', () => {

    console.log('No more data in response.');

   });

 });

 

 // handle the error explicitly

 req.on('error', (e) => {

   console.error(`problem with request: ${e.message}`);

 });


 req.end();


查看完整回答
反对 回复 2023-03-24
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

对我来说,我不确定其他人是否也是这种情况,但 spotify api 拒绝base64(clientID) + ":" + base64(clientKey),但接受base64(clientID + ":" + clientKey)



查看完整回答
反对 回复 2023-03-24
  • 3 回答
  • 0 关注
  • 225 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号