如何区分Slack应用安装实例并关联SaaS用户,Slack Bolt JS怎么实现?
Slack Bolt JS 区分SaaS用户绑定Slack安装实例方案
实现思路
你需要通过OAuth标准的state参数传递SaaS用户标识,Slack OAuth流程会原样返回该参数,你在回调阶段解析该参数即可完成Slack安装实例和SaaS用户的绑定,Slack Bolt JS 已经提供了完整的相关钩子和参数配置能力,无需自己改造OAuth流程。
改造代码示例
你需要调整初始化配置,增加state自定义处理、安装前后钩子即可实现需求:
const { App } = require('@slack/bolt'); const app = new App({ installerOptions: { installPath: '/slack/install', redirectUriPath: '/slack/oauth_redirect', // 自定义state处理逻辑 stateStore: { // 生成state参数:把SaaS用户标识存入state generateStateParam: async (installUrlOptions, now) => { // 从安装链接的query参数中获取你传入的SaaS用户ID const saasUserId = installUrlOptions.query.saas_user_id; const stateData = { saasUserId, expireAt: now + 600 // 可自定义state过期时间,单位秒,示例为10分钟 }; // 返回的内容会作为state参数传递给Slack,Bolt默认会自动做加密处理 return JSON.stringify(stateData); }, // 回调时解析校验state verifyStateParam: async (now, stateParam) => { const stateData = JSON.parse(stateParam); // 校验state是否过期,避免恶意请求 if (stateData.expireAt < now) { throw new Error('State已过期,请重新发起安装流程'); } return stateData; } }, // 安装前钩子:校验必要参数是否存在 beforeInstallation: async (installOptions, installUrlOptions) => { if (!installUrlOptions.query.saas_user_id) { throw new Error('缺少必要的SaaS用户标识参数'); } return installOptions; }, // 安装完成后钩子:完成SaaS用户和Slack实例的绑定 afterInstallation: async (installation, installOptions, state) => { const saasUserId = state.saasUserId; // installation对象包含Slack工作区ID、授权token等完整安装信息,将其和saasUserId绑定存入你的业务数据库即可 await yourDatabase.saveSlackBindInfo(saasUserId, installation); return installation; } }, // 其余必填配置不要遗漏 clientId: process.env.SLACK_CLIENT_ID, clientSecret: process.env.SLACK_CLIENT_SECRET, signingSecret: process.env.SLACK_SIGNING_SECRET, // 生产环境务必自行实现InstallationStore持久化安装信息,默认内存存储重启后数据会丢失 installationStore: yourCustomInstallationStore });
注意事项
- 你的SaaS平台的「绑定Slack」入口跳转时,必须附带当前用户的唯一标识参数,跳转示例:
http://example.com/slack/install?saas_user_id={{当前登录用户的唯一ID}} - 生产环境必须自行实现
installationStore持久化Slack安装信息,Bolt默认的内存存储仅适合本地测试,服务重启后所有安装数据会丢失 state参数会由Bolt默认进行加密处理,无需额外处理数据安全问题,如有更高安全要求可自行额外加签名校验
内容的提问来源于stack exchange,提问作者rubenhak
相关产品推荐
相关产品推荐

