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

无Okta管理员权限,如何程序化通过Okta SSO获取Slack访问令牌?

程序化通过Okta SSO登录Slack并获取访问令牌的解决方案

核心思路

由于无企业Okta管理员权限,无法获取Slack应用的client_id/client_secret,无法走标准OAuth2流程。需模拟Okta到Slack的SSO跳转逻辑,利用已获取的Okta sessionToken来获取Slack的认证凭证。

具体操作步骤

1. 确认已获取有效Okta sessionToken

你已经完成这一步:

  • 调用 {{domain}}/api/v1/authn 接口传入用户名密码,触发MFA验证
  • 调用 {{domain}}/api/v1/authn/factors/{{factorID}}/verify 完成MFA,获取sessionToken

2. 获取Okta中Slack应用的SSO跳转链接

通过浏览器正常登录Okta后进入Slack应用,抓包获取跳转的初始URL(或从Okta应用面板复制Slack应用的访问链接),格式通常为:

{{okta_domain}}/app/slack/{{slack_app_id}}/sso/saml

将sessionToken作为参数拼接至此URL:

{{okta_domain}}/app/slack/{{slack_app_id}}/sso/saml?sessionToken={{sessionToken}}

3. 请求跳转URL提取SAML断言

用HTTP客户端(如Python requests)发送GET请求到上述拼接后的URL,跟随重定向。Okta会返回一个包含SAML断言的HTML表单,提取表单中的SAMLResponse字段值,同时记录RelayState字段值。

4. 提交SAML断言到Slack获取会话令牌

向Slack的SAML接收端点(通常为https://slack.com/saml/consume)发送POST请求,表单数据包含:

  • SAMLResponse: 提取的断言值
  • RelayState: 从Okta返回的表单中获取的值

跟随请求重定向后,从响应的Cookie中提取d字段——这就是Slack的用户会话令牌。

5. 使用Slack令牌调用API

在请求Slack Web API时,将d令牌放入Cookie请求头:

Cookie: d={{slack_d_cookie}}

例如调用获取会话历史的接口:

GET https://slack.com/api/conversations.history?channel={{channel_id}}

关键注意事项

  • 必须通过自身浏览器正常登录流程抓包,确保获取的Slack应用ID和端点准确
  • 模拟请求时需设置真实的User-Agent,避免被Slack的反爬机制拦截
  • Slack的d令牌存在有效期,需定期重新执行流程刷新令牌

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:17:35