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

Spotify令牌调用后返回错误网站,而不是错误或令牌

廖弘伟
2023-03-14

我正在尝试使用授权代码流,而不是我当前使用的隐式授权。下面是这两个流的文档。我正在使用来自我的角度2应用程序的斑点API。前三个步骤进展顺利,我从回调调用中获取代码。但是当我向 https://accounts.spotify.com/api/token 发出帖子呼叫时,我得到CORS异常,因为呼叫返回浏览器禁止的网站。返回页面与单击此链接 https://accounts.spotify.com/api/token 相同。我尝试使用curl调用此API,这就是我注意到的。调用此命令时:

curl -H "Authorization: Basic ZjM...zE=" -d grant_type=authorization_code -d code=MQCbtKe...44KN -d redirect_uri=https%3A%2F%2Fwww.foo.com%2Fauth https://accounts.spotify.com/api/token

它返回错误 json 消息并抱怨无效的客户端。

当我删除数据时,它会返回该错误html页面。

curl -H "Authorization: Basic ZjM...zE=" https://accounts.spotify.com/api/token

所以我假设在我的代码中问题是相同的或类似的。那么可以将这些参数设置为POST调用主体吗?Spotifyendpoint似乎根本没有收到我的参数,这就是为什么它不返回错误消息。这是spotify提供的示例,这是Angular超文本传输协议组件的留档。

这是我的打字脚本调用:

var data  = {
    redirect_uri: this.config.redirectUri,
    grant_type: 'authorization_code',
    code : code
};

let headers = this.getTokenHeaders();
let address = "https://accounts.spotify.com/api/token";
return this.http.post(address,data, new RequestOptions({headers: headers}))
    .toPromise()
    .then(res => 
    {
        let body = res.json();
        localStorage.setItem('spotify-access-token', body.access_token);
        localStorage.setItem('spotify-refresh-token', body.refresh_token);
        var expiresIn = body.expires_in;

        return true;
    })
    .catch(err=> 
    {
        return false;
    });

getTokenHeaders()
    {
        return new Headers(this.accountAuth());
    }

private accountAuth(): Object {
    var auth = {
        'Authorization': 'Basic ' + (new Buffer(this.config.clientId + ':' + this.config.clientSecret).toString('base64')),
        'Content-Type': 'application/x-www-form-urlencoded'
        //'Content-Type':'application/json'
    };
    return auth;
}

我尝试将Content-Type设置为application/json和application/x-www-form-urlencoded。

共有1个答案

葛浩阔
2023-03-14

我找到了这个答案https://stackoverflow.com/a/28406268/8081009并从服务器端尝试了它,当我使用消息体传递参数时,也得到了相同的错误页面。然后我将参数更改为url,如下所示:

var url = "/api/token?redirect_uri=http://localhost:8080/callback.html&grant_type=authorization_code&code="+code;

现在我得到了正确的信息。希望这能帮助到一些人。

所以不要从客户端使用api/token,设置参数为url。

 类似资料:
  • 但是,我收到以下错误: “my_error”:“SQL错误:derived_table zero_to_3创建失败:CREATE TABLE as select:com.ibm.DB2.jcc.am.sqlsyntaxerrorexception:DB2 SQL错误:sqlcode=-104,sqlstate=42601,sqlerrmc=as;rO_to_3\”(\n有两个;join,drive

  • 我正在使用adal-angular4库在angular 4单页应用程序中进行隐式流实现。这个应用程序调用一个web api来显示结果。这两个应用程序都托管在azure中(在一个特定的租户中),并进行了适当的注册,配置工作正常。

  • 问题内容: 创建新类时遇到了此类错误。下面是我的代码: 谁能帮助我弄清楚实际发生了什么,并提出解决建议?非常感谢您的帮助 真诚的 问题答案: 该声明 应该在代码块中,例如方法,构造函数或实例初始化程序中,而不是在类块中

  • 问题内容: 我需要验证一个Google id_token,其中一个步骤涉及检查令牌签名。 首先,我从以下网址获取证书:https : //www.googleapis.com/oauth2/v2/certs,并从证书中提取模数(n)和指数(e)并生成公钥,然后分解令牌(标题,有效负载和摘要),然后将解码后的内容与Google pKey +摘要一起发送到rsa函数。 我陷入了这个验证错误: 这是代码

  • 问题内容: 我尝试了以下简单的JavaScript代码: 例如,在Chrome控制台中,这将返回 SyntaxError:意外令牌: 我在JSONLint上尝试了JSON ,它是有效的。 您看到错误了吗? 问题答案: FWIW,改为使用。比。

  • 问题内容: 尝试解析此JSON字符串时出现错误 扩展的字符串对象: 问题答案: 验证您的json字符串。如果可以,请尝试以下操作: