Slack机器人令牌应该如何存储? [英] How should Slack bot tokens be stored?
问题描述
我正在构建我的第一个Slack机器人,我已经基本完成了……发送API请求、接收命令和事件等。但让我感到有点困惑的是,我应该如何处理"Bot用户OAuth访问令牌"。
令牌似乎是跨团队/工作区共享的,但它在通过调用/oauth.v2.access
对单个用户进行身份验证期间返回。目前,我将返回的凭据有效负载存储在一个包含三列的表中:
- 我的应用程序的内部用户ID
- 负载中嵌入的Slack用户ID
authed_user.id
- 整个JSON有效负载本身(如果您好奇,
jsonb
在Postgres中)
这使我可以为我的应用程序中发生的操作(按内部用户ID查找)以及Slack内的交互(按Slack用户ID查找)启动新的API调用。
让我有点困惑的是,当用户与我的机器人交互时,没有添加我的应用程序的约定是什么。当一个人("Jose")添加了我的应用程序,然后他们的同事("Mary")在Slack中发现了它,并查看主屏幕,向其发送消息等,就会发生这种情况。为了执行某些操作,例如提示用户安装我的应用程序,我需要一个令牌。当然,我有一件礼物送给何塞,但不是送给玛丽。我还将Jose的团队ID存储在我的表中,并将Mary的团队ID作为传入事件的一部分。因此,从技术上讲,我可以执行以下操作来获得与Mary交互的工作令牌:
select credential_json from slack_credentials
where credential_json->>'type' = 'bot' and credential_json->'team'->>'id' = :marysTeamId
.这将取出我在Jose添加应用程序时捕获的机器人令牌。这是有效的,但感觉非常错误。我想如果我只是将机器人令牌存储在一个单独的表中,如下所示:
- 负载中嵌入的Slack团队ID
team.id
- JSON负载的子集(例如:
access_token
、scope
、bot_user_id
等,但不是authed_user
)
那就不会觉得那么难吃了。但Docs+API的人体工程学也表明,这也不是一种常见的方法。所以我很好奇别人是怎么做的。如果我没有收到任何回复,我想我的计划是将机器人令牌分解到一个以团队为中心的表中。
谢谢!
推荐答案
Slack应用的基本概念是按工作区安装,而不是按用户安装。
因此,尽管应用程序的令牌确实派生自将应用程序安装到新工作区的用户,但工作区的所有用户都可以使用大多数应用程序功能。
例如,斜杠命令将适用于每个渠道中的每个用户 例如,相关频道的所有用户都可以看到您的应用程序的帖子。因此,存储令牌的最佳方法通常是使用主键Slack Team ID、Slack User ID。
只是想澄清一下。您不需要令牌来提示用户安装您的应用程序。每个应用都可以从您托管的网页(使用"添加到松弛"按钮)安装,也可以直接从应用目录安装。
这篇关于Slack机器人令牌应该如何存储?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!