Spotify API 授权代码流返回“unsupported_grant_type”错误

Posted

技术标签:

【中文标题】Spotify API 授权代码流返回“unsupported_grant_type”错误【英文标题】:Spotify API Authorization Code Flow Returning 'unsupported_grant_type' Error 【发布时间】:2018-09-22 21:07:57 【问题描述】:

我正在尝试使用 Node.js 应用程序访问 Spotify Web API。我已将grant_type 指定为authorization_code,但收到unsupported_grant_type 错误,描述为grant_type must be client_credentials, authorization_code or refresh_token

据我所知,我的 post 请求格式正确且值均正确。不知道还要检查什么。

app.post('/auth', (req, res)=>
  const auth = Buffer
                .from(`$process.env.CLIENT_ID:$process.env.CLIENT_SECRET`)
                .toString('base64');
  axios.post(token_uri, , 
      params: 
      'grant_type': 'authorization_code',
      'code': req.body.code,
      'redirect_uri': redirect_uri,
      client_id: process.env.CLIENT_ID,
      client_secret: process.env.CLIENT_SECRET
    , headers: 
        'Authorization': `Basic $auth`,
        'Content-Type':'application/x-www-form-urlencoded'
      
    )
    .then(res=>
      console.log(res.data)
    )
    .catch(err=>
      console.log(err)
    )
)

【问题讨论】:

【参考方案1】:

您正确设置了内容类型,但您以 JSON 格式而不是 x-www-form-urlencoded 格式发送数据。

以下 JSON 格式

      params: 
      'grant_type': 'authorization_code',
      'code': 'my_secret_code
    

可以像这样转换为 x-www-form-urlencoded:

params = 'grant_type=authorization_code&code=my_secret_code'

尝试像这样更新您的请求:

  const params = 'grant_type=authorization_code&code=' + req.body.code
               + '&redirect_uri=' + redirect_uri
               + '&client_id=' + process.env.CLIENT_ID
               + '&client_secret=' + process.env.CLIENT_SECRET';

  axios.post(token_uri, 
    params,
    
      headers: 
          'Authorization': `Basic $auth`,
          'Content-Type':'application/x-www-form-urlencoded'
        
    )
    .then(res=>
      console.log(res.data)
    )
    .catch(err=>
      console.log(err)
    )

【讨论】:

以上是关于Spotify API 授权代码流返回“unsupported_grant_type”错误的主要内容,如果未能解决你的问题,请参考以下文章

Spotify 授权代码流返回不完整的响应

Spotify API 授权代码流向我返回 400 错误请求

授权代码流,将代码从移动应用程序发送到 REST API

如何使用 Express 构建“客户端凭据流”以授权使用 Spotify API?

Spotify Web Api 令牌请求响应 400

Spotify - 使用隐式流获取和更改用户数据