在Spotify API的授权过程中获取HTTP 415不支持的媒体类型

Shubhank92

我想使用此处提到的“客户端凭据流”访问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>

Macborowy

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

415不支持的媒体类型HTTP

HTTP 415不支持的媒体类型

HTTP 415 JSON不支持的媒体类型错误

不支持的媒体类型,Http 错误 415

Grizzly HTTP Server 415不支持的媒体类型

415 Artifactory AQL POST中不支持的媒体类型

415:Apache Tomee Plumee中不支持的媒体类型

获取HTTP状态415-泽西岛不支持的媒体类型

使用 text/xml 获取 http 415,不支持的媒体类型

调用Web API 2端点时HTTP 415不支持的媒体类型错误

尝试使用Rest API创建Hpalm缺陷时,获取“ 415不支持的媒体类型”

Angular 7和.NET Core API中不支持的媒体类型415错误

出现错误415-提取API中不支持的媒体类型

JAX-RS:HTTP状态415-不支持的媒体类型

Keycloak admin-cli throwing-HTTP错误-415不支持的媒体类型

适配器部署失败:HTTP 415-不支持的媒体类型

服务器返回 HTTP 响应代码:415 不支持的媒体类型

Mule APIkit:“找不到流”,而不是HTTP 415不支持的媒体类型

ASP.NET Core表单POST导致HTTP 415不支持的媒体类型响应

带有JSON POST的Http 415不支持的媒体类型错误

Dynamics NAV Odata 请求返回 HTTP/1.1 415 不支持的媒体类型

设置无gRPC DB-DB API网关:415不支持的媒体类型

使用邮递员测试.Net Web API时得到415不支持的媒体类型

Web API ASP.NET Core发布请求415不支持的媒体类型

球衣RESTful api在使用FormDataMultipart时答复415不支持的媒体类型

Forge Api PATCH 请求返回 415“不支持的媒体类型”

415 ionic 2中不支持的媒体类型-Web服务POST?

如何在Angular 6中上传文件时修复415不支持的媒体类型

错误415在上传文件中不支持的媒体类型