You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Slack API交换Access Token失败,提示invalid_code错误

Slack API获取Access Token时返回"invalid_code"错误

问题详情

我尝试通过Slack API获取Access Token,流程如下:

  1. 生成包含临时授权码的授权URL,用户授权后重定向至/slack/oauthcallback:
const slackAuthorizeUrl = `https://slack.com/oauth/v2/authorize?client_id=${slackClientId}&redirect_uri=${encodeURIComponent(slackRedirectUri)}&scope=users:read,chat:write,channels:read`

app.get('/slack/auth', (req, res) => {
    res.json({ authUrl: slackAuthorizeUrl })
})
  1. 用回调获取的授权码交换Access Token时失败,收到invalid_code错误:
app.get('/slack/oauth2callback', (req, res) => {
    const { code } = req.query
    console.log('callback code- ', code)

    const tokenExchangeUrl = 'https://slack.com/api/oauth.v2.access';
    const tokenExchangeData = {
        client_id: slackClientId,
        client_secret: slackClientSecret,
        code: code,
        redirect_uri: slackRedirectUri,
    };

    axios.post(tokenExchangeUrl, tokenExchangeData).then(res => {
        const userToken = res.data
        console.log('user data - ', userToken)
    })

    res.status(200).send('recieved code')
})

返回的响应数据:

user data -  {
  ok: false,
  error: 'invalid_code',
  warning: 'missing_charset',
  response_metadata: { warnings: [ 'missing_charset' ] }
}

排查与解决方法

  • 确保redirect_uri完全一致:授权URL中使用了encodeURIComponent(slackRedirectUri),但交换token时直接传入了原始的slackRedirectUri。如果原始URI包含特殊字符(比如斜杠、参数),会导致两者不匹配。解决方法是交换token时也使用编码后的URI,或者确保两处的URI字符串完全相同。
  • 修正POST请求格式:Slack的oauth.v2.access接口要求POST数据采用application/x-www-form-urlencoded格式,而axios默认发送的是JSON格式。需要修改请求配置:
    axios.post(tokenExchangeUrl, new URLSearchParams(tokenExchangeData), {
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept-Charset': 'utf-8'
        }
    }).then(res => {
        const userToken = res.data
        console.log('user data - ', userToken)
    })
    
  • 检查授权码有效性:授权码只能使用一次,重复调用会触发invalid_code;同时授权码有有效期,若延迟过久请求也会失效。确认是否存在重复调用或超时问题。
  • 处理字符集警告:响应中的missing_charset提示需要指定字符集,在请求头添加Accept-Charset: utf-8即可解决该警告。

内容的提问来源于stack exchange,提问作者Nimish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:56:26