【发布时间】:2021-09-30 18:30:09
【问题描述】:
我正在尝试从浏览器调用 Slack 的 API,所以我在 Chrome 的开发控制台中运行了以下命令,但出现错误:
await (await fetch("https://slack.com/api/apps.connections.open", {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({'token': 'xapp-1-MYTOKEN'})
})).json()
→ {ok: false, error: 'invalid_auth'}
我认为通过请求正文提供令牌应该没问题,因为documentation 是这样说的:
令牌应该作为 HTTP 授权标头传递,或者作为 POST 参数传递。
我错过了什么吗?
我尝试了等效的(我认为)cURL 命令并且结果相同。
$ curl -s --data-urlencode token@TOKEN https://slack.com/api/apps.connections.open | jq
{
"ok": false,
"error": "invalid_auth"
}
我确保我的令牌是正确的;当我通过 Authorization 标头发送令牌时,API 调用成功:
$ curl -s -X POST -H Authorization:\ Bearer\ $(<TOKEN) https://slack.com/api/apps.connections.open | jq .ok
true
请注意,在使用 Fetch API 时不能使用 Authorization 标头,因为 CORS 限制(access-control-allow-headers 标头不包含“Authorization”)。
我了解通常从浏览器调用 Slack API 来保持令牌的机密性不是一个好主意。
【问题讨论】:
-
看来您现在必须使用不同的方法来提交令牌:api.slack.com/changelog/…
-
@Pikamander2 感谢您的链接,但我不这么认为。我相信不推荐使用的是在查询字符串中发送令牌,即slack.com/api/apps.connections.open?token=TOKEN;作为 POST 请求发送令牌仍然有效。
-
你能用你的 fetch 方法试试这个吗? :stackoverflow.com/questions/30203044/…
-
@SuyashGaur 对不起,我不明白你的意思。你能详细说明一下吗?
标签: fetch authorization slack-api bearer-token