从 HTML 运行 GET 时,Slack API 返回 invalid_auth?

Posted

技术标签:

【中文标题】从 HTML 运行 GET 时,Slack API 返回 invalid_auth?【英文标题】:Slack API returning with invalid_auth when running GET from HTML? 【发布时间】:2022-01-03 18:33:07 【问题描述】:

我在测试工作区中创建了一个 Slack Bot 来玩。我要做的就是运行一个 GET API 来收集频道的内容,但我在第一个障碍中绊倒了......

API = GET https://slack.com/api/conversations.history

变量:

    令牌=xoxb-xxxx...AwQ 频道= xxxxH9P 机器人是added to the channel。 我添加了正确的Scopes。 使用 Tester API here 确实有效!

但是我自己的 html 代码失败了……返回 invalid_auth……所以我想这一定是我的 HTML 的问题……但问题是,完全相同的代码适用于我之前设置的另一个 slack 机器人!

基本的 HTML:

    <html>
    <head>
    </head>
    <body>

    <button id = "SendButton" onclick="GetChannelFromSlack()">GET</button>
    <p id="GET API Output">Test</p>

    </body>

    <script>
    function GetChannelFromSlack() 
        var slackBotToken = "xoxb-xxxxAwQ";
        var slackChannelID = "xxxxH9P";

        var getSlackData = new XMLHttpRequest();
        var url = new URL('https://slack.com/api/conversations.history?token='+slackBotToken+'&channel='+slackChannelID);   
            
        getSlackData.open( "GET", url, true );
        //getSlackData.setRequestHeader = ('Authorization', 'Bearer xoxb-xxxxAwQ'); 
        getSlackData.responseType = 'json';
        
        getSlackData.send();
        
        getSlackData.onload = function()  
            var jsonResponse = getSlackData.response;
            document.getElementById("GET API Output").innerHTML = JSON.stringify(jsonResponse);
        
    

    </script>
    </html>

(代码 sn-p 实际上无法工作,因为我没有输入我的实际机器人令牌/频道 ID)

编辑此外,为了隔离问题 - 这是一个 curl 命令,适用于一个机器人/频道,但不适用于另一个:

工作: curl -X GET 'https://slack.com/api/conversations.history?token=xoxb-xxx-VKa&channel=CxxxxTX'

不工作: curl -X GET 'https://slack.com/api/conversations.history?token=xoxb-xxx-AwQ&channel=Cxxxx9P'

我看不出这两个机器人的设置有什么不同...

如果有人能找出失败的原因,我将不胜感激!

问候, 丹恩

【问题讨论】:

来自docs:令牌应作为HTTP 授权标头 或作为POST 参数 传递。您作为 GET 参数传递。 感谢詹姆斯的回复!我在文档中也看到了这一点。这个 API 绝对是一个 GET .. 你可以在注释掉的行中看到,我也尝试将令牌作为标题包含:( getSlackData.setRequestHeader = ('Authorization', 'Bearer xoxb-xxxxAwQ') ;) 【参考方案1】:

仅使用 curl 进一步调查,我能够使用以下格式通过任一机器人/通道获取输出:

curl -H "授权:承载 xoxb-xxxxxAwQ" -X GET 'https://slack.com/api/conversations.history?channel=CxxxxTX'

我仍然不清楚为什么其他 API 调用格式适用于我的原始机器人,但我很高兴接受并使用这种格式,并相应地调整 HTML 代码。

谢谢! 丹恩

【讨论】:

以上是关于从 HTML 运行 GET 时,Slack API 返回 invalid_auth?的主要内容,如果未能解决你的问题,请参考以下文章

slack events api通过一条消息多次触发

ruby 这个Ruby脚本将批量删除超过30天的所有Slack文件。只需从https://api.slack.com/web#authentication添加您的API令牌即可

ruby 这个Ruby脚本将批量删除超过30天的所有Slack文件。只需从https://api.slack.com/web#authentication添加您的API令牌即可

Slack API - 向个人空间(您)发送直接消息

如何自动从 Slack 获取访问令牌?

slack api : 上传到 slack 频道的文件