我想使用此处提到的“客户端凭据流”访问Spotify Web API 。我尝试使用此处提到的一些教程来访问它,但由于它已使用了已经弃用的节点中的请求库,因此无法遵循它,因此,我尝试在其位置使用axios并在浏览器中始终收到状态代码415错误安慰。我正在尝试使用此API来创建辅助项目,因为我是一个初学者。我使用NodeJS和普通的浏览器控制台(在这里使用了浏览器控制台的代码)完成了此操作,并且安装了axios和express库(使用node时)。
const client_id = '**redacted**';
const client_secret = '**redacted**';
const res = axios.post('https://accounts.spotify.com/api/token', {
headers: {
'Authorization': 'Basic ' + btoa(`${client_id}` + ':' + `${client_secret}`),
},
form: {
grant_type: 'client_credentials'
}
});
console.log(res)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AXIOS DOC</title>
</head>
<body>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="script2.js"></script>
</body>
</html>
Spotify的API要求您使用编码POST请求的正文application/x-www-form-urlencoded
。要使用axios做到这一点,您需要使用其他库或自行创建serialize()
函数(我从此答案中使用过serialize(obj)
函数)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AXIOS DOC</title>
</head>
<body>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
const client_id = '**redacted**';
const client_secret = '**redacted**';
const serialize = function(obj) {
var str = [];
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
}
return str.join("&");
}
axios
.post('https://accounts.spotify.com/api/token',
serialize({
grant_type: 'client_credentials'
}), {
headers: {
'Authorization': 'Basic ' + btoa(client_id + ':' + client_secret),
}
})
.then(res => console.log(res.data.access_token))
.catch(err => {
console.log(err);
});
</script>
</body>
</html>
另一种解决方案是只使用自动序列化数据的请求库。
另外,请注意从客户端使用“客户端证书”授予类型进行请求。这样,您可以公开自己client_secret
的应用程序,并为其他人提供模拟您的应用程序的方法。
客户端凭据授予类型应仅在服务器端使用,可以确保client_secret
不会暴露服务器端。
如果要在客户端上对用户进行安全认证,请使用PKCE(更好)或隐式授予类型的授权码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句