Slack の xoxc トークンと xoxd トークンの正体と仕組み
xoxc は Slack ウェブクライアントのトークン、xoxd はセッション Cookie です。片方だけでは動きません。各接頭辞の意味と認証の仕組みを解説します。
On this page
Slack を開いた状態でブラウザの開発者ツールを見たことがあるなら、見慣れない2つの文字列に気づいたはずです。ひとつは xoxc- で始まり、もうひとつは xoxd- で始まります。どちらも Slack の API ドキュメントには載っておらず、検索しても説明のない短いスニペットが出てくるだけです。
結論から書きます。xoxc は Slack のウェブクライアントが内部 API を呼ぶときに使うトークンです。xoxd はサインイン時に Slack がセットする d Cookie の値です。この2つでひとつのセッションを構成します。片方だけを送っても、Slack は認証エラーを返します。
私たちはこのトークンの組み合わせを日常的に扱っています。Slack Green はサーバーから Slack のステータスをアクティブに保つサービスで、ボットトークンではなくこのトークンのペアで認証します。ボットトークンでは本人のプレゼンスを操作できないからです。必要に迫られて調べた内容ですが、まとまった資料がほとんど存在しないため、ここに書き残します。
xoxc トークンとは何か
xoxc は Slack のウェブクライアント用トークンです。ブラウザで Slack を開くと、ページの起動時にトークンがローカルストレージへ保存され、ウェブアプリのすべてのリクエストが Authorization: Bearer ヘッダーでそのトークンを送ります。
スコープはワークスペース単位です。4つのワークスペースにサインインしていれば、xoxc の値も4つ、ワークスペースごとに別々に存在します。
ボットトークンでも OAuth トークンでもありません。アプリのインストール手順で発行されるものではなく、権限の承認画面もありません。ブラウザセッションそのものを表すため、そのワークスペースであなたができる操作はすべて実行できます。
xoxd トークンとは何か
xoxd は厳密にはトークンではありません。認証時に .slack.com にセットされる d という名前の Cookie の値です。役割は、そのリクエストが盗まれた文字列ではなく実際にサインイン済みのセッションから来ていることを証明することです。
Bearer トークンではなく Cookie ヘッダーとして送ります。
Cookie: d=xoxd-your-value-here
xoxc と違い、xoxd はそのブラウザでサインインしているすべてのワークスペースに共通です。ワークスペースではなく Slack のログインに紐づくためです。
なぜ xoxc と xoxd は2つ揃わないと動かないのか
Slack が両方を検証しているからです。xoxc はどのワークスペースの誰として操作するかを示します。d Cookie はそのトークンの背後にあるセッションがまだ有効であることを証明します。どちらかが欠けると失敗します。
Slack の内部 API へのリクエストは次のようになります。
curl 'https://slack.com/api/users.setPresence' \
-H 'Authorization: Bearer xoxc-...' \
-H 'Cookie: d=xoxd-...' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data 'presence=auto'
Cookie なしで Bearer トークンだけを送ると not_authed が返ります。Bearer トークンなしで Cookie だけを送ると、Slack はどのワークスペースの話なのか判断できません。クライアントがリアルタイムイベント用に張る WebSocket 接続も同じで、ハンドシェイクで d Cookie を送ります。
Slack の他のトークン接頭辞は何を意味するのか
Slack は接頭辞で資格情報の種類を表します。この記事で扱うペアは、開発者向けドキュメントに載っているトークンとは別のカテゴリに属します。
| 接頭辞 | 種類 | 取得方法 | プレゼンスを変更できるか |
|---|---|---|---|
xoxc- | ウェブクライアントトークン、ワークスペース単位 | ブラウザセッション | できる |
xoxd- | セッション Cookie d の値 | ブラウザセッション | xoxc と組にした場合のみ |
xoxb- | ボットトークン | アプリのインストール | できない、ボットは自身のプレゼンスを持つ |
xoxp- | ユーザー OAuth トークン | ユーザースコープ付きインストール | 権限があればできる |
xoxa- | アプリレベルトークン | アプリ設定 | できない |
xoxe- | ローテーション用リフレッシュトークン | OAuth ローテーション | できない |
実務上の区別は単純です。xoxb と xoxp はアプリのインストールで発行され、承認したスコープを持ちます。xoxc と xoxd はサインインしている状態そのものから生まれ、スコープの一覧を持たず、Slack のウェブアプリ自身が使っています。
xoxc と xoxd はどこで確認できるのか
自分のアカウントを、自分のブラウザで確認する手順です。
- ブラウザで Slack を開き、対象のワークスペースにサインインします。
- 開発者ツールを開き、Application パネルを表示します。
- Local Storage の
localConfig_v2を開きます。対象ワークスペースのtokenフィールドがxoxc-で始まる値です。 - Cookies の
slack.comを開き、dという名前の Cookie の値をコピーします。これがxoxd-の値です。
注意点を2つ、はっきり書いておきます。この資格情報はスコープの制限なしにあなた本人として動作するため、パスワードと同じ扱いが必要です。信頼できないサイトに貼り付けてはいけません。そして対象はあなた自身のアカウントに限られます。他人の値を取得する行為は連携ではなくアカウントの不正利用です。
何に使われているのか
ウェブクライアントにできて、公開 API のボットにはできないことです。よくあるのはプレゼンスやステータスの自動化、自分のメッセージ履歴のエクスポート、そして n8n や MCP サーバーのようにボットトークンでは形が合わない場面でのスクリプト連携です。
もっとも分かりやすいのがプレゼンスで、私たちがこのペアを重視する理由でもあります。Slack は入力が約10分途切れると離席扱いに切り替わります。詳細は Slack がアクティブでいられる時間 にまとめました。ボットトークンではこれを解決できません。ボットは自分自身のプレゼンスしか持たないからです。xoxc と xoxd のペアなら解決できます。Slack から見れば、あなた自身のクライアントが話しているからです。これが、マウスジグラーを使わずに Slack をアクティブに保つ 仕組みであり、自分でトークンを管理したい人向けの セルフホスト CLI の土台でもあります。
xoxc と xoxd の有効期限はどれくらいか
背後にあるブラウザセッションが生きている限り有効です。Slack はサインイン状態を維持するため、通常の使い方なら数か月は使えます。
無効になるのは、そのワークスペースからサインアウトしたとき、管理者がセッションを終了したとき、ワークスペースのセッション期限が切れたときです。タブを閉じただけでは終了しません。Cookie を削除すると d Cookie が消えるため無効になります。
このペアに更新用のエンドポイントはありません。期限が切れたら、サインインし直して新しい値を読み直します。これらのトークンを使う仕組みは、認証エラーを検知して再取得を促す作りにする必要があります。無限にリトライしても回復しません。
自分のトークンを使うのは Slack の規約違反か
Slack の API 利用規約は自動アクセスを対象としており、トークンはあなたのセッションを表すという意味であなたのものです。実務でより重要なのは勤務先のポリシーです。プレゼンスは管理者が見ている場合があります。この点の現実的な話は バレるのかどうか に書きました。
私たちが引いている線は、自分のアカウント、自分のセッション、他人のデータを収集しないこと、そして管理者から見えるべきセキュリティイベントを隠さないことです。
まとめ
xoxc は誰がどこで操作しているかを示します。xoxd はセッションが生きていることを証明します。Slack のウェブクライアントはすべての呼び出しで両方を送っているため、そのクライアントを模倣する仕組みも同じことをする必要があります。
自分でトークンを管理せずに Slack のステータスを緑のままにしたいのであれば、それが Slack Green の役割です。無料で試す 場合、設定は2分ほどで終わります。
Related Articles
スマホでSlackをアクティブに保つ(iPhone・Android)
デスクトップでは最後の入力から10分の猶予がありますが、スマホではほぼゼロです。アプリが前面から外れた瞬間に緑の点は消え始めます。スマホ側で唯一効く画面点灯ワザと、それでは足りないときの選択肢をまとめました。
Slackのアクティブ表示の仕組み|緑の点とステータスとタイマー
Slackには「ステータス」と呼ばれるものが2つあります。緑の点はSlackが10分タイマーで自動的に決め、名前の横のテキストは自分で手動設定します。両者は互いに影響しません。点が何で決まるかを端末別に解説します。
Slackが勝手に離席中になるのを止める方法
Slackに離席中表示をオフにする設定はありません。離席中に切り替わる引き金は4つだけ。手動切替の戻し忘れ、10分タイマー、スリープとロック、放置したスマホセッション。それぞれの直し方をまとめました。