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 が何を返すかは、下のテストに載せています。
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'
2026年10月6日に、サインイン中の Slack ウェブタブから確認しました。タブ自身の xoxc トークンで auth.test を呼び、Cookie を付けたり外したりした結果です。
xoxc as Bearer header + d cookie -> ok: true, user: sieun
xoxc as Bearer header, no cookie -> ok: false, error: invalid_auth
xoxc in the form body + d cookie -> ok: true, user: sieun
xoxc in the form body, no cookie -> ok: false, error: invalid_auth
d cookie only, no token -> ok: false, error: not_authed
つまり、Cookie のないトークンは invalid_auth で、トークンのない Cookie は not_authed で拒否されます。後者は、Slack がどのワークスペースの話か判断できないためです。クライアントがリアルタイムイベント用に張る WebSocket 接続も同じで、ハンドシェイクで d Cookie を送ります。
Slack の他のトークン接頭辞は何を意味するのか
Slack は接頭辞で資格情報の種類を表します。この記事で扱うペアは、開発者向けドキュメントに載っているトークンとは別のカテゴリに属します。
| 接頭辞 | 種類 | 取得方法 | プレゼンスを変更できるか |
|---|---|---|---|
xoxc- | ウェブクライアントトークン、ワークスペース単位 | ブラウザセッション | できる |
xoxd- | セッション Cookie d の値 | ブラウザセッション | xoxc と組にした場合のみ |
xoxb- | ボットトークン | アプリのインストール | できない、ボットは自身のプレゼンスを持つ |
xoxp- | ユーザー OAuth トークン | ユーザースコープ付きインストール | 権限があればできる |
xapp- | アプリレベルトークン | アプリ設定の Basic Information | できない |
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 のウェブクライアントはすべての呼び出しで両方を送っているため、そのクライアントを模倣する仕組みも同じことをする必要があります。
Related Articles
How to See All Your DMs in Slack, Including the Hidden Ones
The DMs tab lists your direct messages with people. App DMs, Slackbot and DMs with deleted accounts sit elsewhere. We compared the tab with the full list the Slack API returned.
Slack Images Not Showing? 5 Causes We Reproduced
We uploaded images to a Slack test channel and then switched each image setting off, ran /collapse, and posted from a bot that was not in the channel. Five causes, each reproduced.
How to Message Yourself on Slack (and What It Notifies)
Your own name under Direct messages opens a private DM with yourself. We sent it a note, a file, a scheduled message and a reminder, and checked which ones raised a badge.