从 Spotify 请求访问令牌时出现错误“仅支持有效的不记名身份验证”

Posted

技术标签:

【中文标题】从 Spotify 请求访问令牌时出现错误“仅支持有效的不记名身份验证”【英文标题】:Error "Only valid bearer authentication supported" when requesting access token from Spotify 【发布时间】:2016-04-06 22:35:59 【问题描述】:

我正在尝试从 Spotify 获取 oAuth 访问令牌(Guide 中的第 4 步)。

我相信,我发送了他们文档中描述的所有必需参数,但 Spotify 回复:

"error": 
    "status": 400,
    "message": "Only valid bearer authentication supported"

这是我在 node.js 中的请求:

function getToken(code)
    var idAndSecret = config.clientId+':'+config.clientSecret;
    var authString = 'Basic ' + new Buffer(idAndSecret).toString('base64');
    var data = querystring.stringify(
        grant_type: "authorization_code",
        code: code,
        redirect_uri: REDIRECT_URI
    );
    var tokenReq = https.request(
        hostname: 'api.spotify.com',
        path: '/api/token?'+data,
        method: 'POST',
        headers: 
            'Authorization': authString
        
    , function(res)
        res.on('data', function(chunk)
            console.log(new Buffer(chunk).toString());
        );
        console.log(res.statusCode, JSON.stringify(res.headers));
    );

    tokenReq.end();

我已经检查了我的 clientId、clientSecret、auth-code 和 redirectUri。

这是响应标头:


    "server":"nginx",
    "date":"Sat, 02 Jan 2016 23:58:58 GMT",
    "content-type":"application/json",
    "content-length":"99",
    "connection":"close",
    "www-authenticate":"Bearer realm=\\"spotify\\",
    error=\\"invalid_request\\", 
    error_description=\\"Only valid bearer authentication supported\\"",
    "access-control-allow-origin":"*",
    "access-control-allow-methods":"GET, POST, OPTIONS, PUT, DELETE",
    "access-control-allow-credentials":"true",
    "access-control-max-age":"604800",
    "access-control-allow-headers":"Accept, Authorization, Origin, Content-Type"

【问题讨论】:

【参考方案1】:

这是错误的端点:应该是 accounts.spotify.com 而不是 api.spotify.com

然后我得到了一个状态 500 并且我也修复了这个:

function getToken(code)
    var idAndSecret = config.clientId+':'+config.clientSecret;
    var authString = 'Basic ' + new Buffer(idAndSecret).toString('base64');
    var data = querystring.stringify(
        grant_type: "authorization_code",
        code: code,
        redirect_uri: REDIRECT_URI
    );
    var tokenReq = https.request(
        hostname: 'accounts.spotify.com',
        path: '/api/token',
        method: 'POST',
        headers: 
            'Authorization': authString,
            'Content-Type': 'application/x-www-form-urlencoded',
            'Content-Length': Buffer.byteLength(data)
        
    , function(res)
        res.on('data', function(chunk)
            console.log(new Buffer(chunk).toString());
        );
        console.log(res.statusCode, JSON.stringify(res.headers));
    );

    tokenReq.end(data);

【讨论】:

你让我免于继续浪费我的时间。我使用了错误的主机名并打破了为什么 Postman 工作而不是我的应用程序。谢谢!!

以上是关于从 Spotify 请求访问令牌时出现错误“仅支持有效的不记名身份验证”的主要内容,如果未能解决你的问题,请参考以下文章

向 Spotify API 发出 PUT 请求时出现 401 错误

从 Discord API 请求令牌时出现 400 错误

尝试获取访问令牌时出现“请求无效,因为应用程序密钥与客户端令牌相同”错误

请求 Spotify 访问令牌时遇到问题 [错误请求]

尝试请求令牌时出现 Twitter API 错误

从 keycloak 刷新访问令牌时出现 CORS 错误