本文へ移動
Bounty Developer

認証とトークン

BOUNTY の API と MCP を呼ぶときの「誰として呼ぶか」と「何を許すか」をまとめた頁。呼び方は、ログインした本人として呼ぶ、トークンを付けて呼ぶ、認証なしで読む、の三つしかない。

トークンは必ず誰か一人の持ち主として動き、その人が今できることより広いことはできない。運営が外部のサービスにトークンを渡すときの手順と注意は、この頁の後半にある。

呼び方は三つ

ログイン
ブラウザやアプリで BOUNTY にログインした本人として呼ぶ。Web はログインのクッキー、アプリはログインで受け取ったアプリ用トークンを使う。画面の操作はすべてこの呼び方で、別の人の代わりに呼ぶ入口は無い。
トークン
外のサービスや AI から、トークンを Authorization ヘッダに Bearer として付けて呼ぶ。トークンは運営が発行する API トークンと、MCP のログインで AI が受け取るものの二種類。どちらも scope(使ってよい範囲)が決まっている。
認証なし
公開の情報(公開中のイベント・プログラム・契約の OpenAPI など)は、ログインもトークンも無しで読める。API の頁で「認証なし」と書かれた入口だけがこの呼び方を受け付ける。

トークンの種類

BOUNTY が受け付けるトークンは次の四種類。それぞれのカードの「形」はトークンの見た目、「入口」は受け取る場所、「寿命」は使える長さと更新できる長さ。

アプリ用トークン
形
Bearer(JWT)
入口
POST /api/v1/auth/token
寿命
1 時間 · 更新 400 日
BOUNTY のアプリがログインのときに受け取る。利用者が手で扱うことはなく、期限が来るとアプリが自動で更新する。
API トークン
形
bty_pat_…
範囲
scope
発行
運営
運営の管理者が画面で発行する、外部のシステム向けのトークン。発行したときに選んだ scope だけが使え、発行した人として動く。
MCP の連携
形
OAuth 2.1 · PKCE S256
入口
/mcp
寿命
1 時間 · 更新 30 日
Claude や ChatGPT などの AI が、利用者本人のログインと許可で受け取るトークン。MCP の入口の中からだけ使え、API を直接呼ぶことはできない。
Web のログイン
形
cookie
Bearer と併用
しない
ブラウザのログイン。クッキーで本人を見分けるので、トークンを付ける必要はない。同じ要求でトークンと混ぜて使うことはない。

scope(使ってよい範囲)

scope はトークンに許す範囲の名前。トークンを使うたびに、BOUNTY は「その scope が付いているか」と「持ち主が今その操作をしてよいか」の両方を確かめる。scope が付いていても、持ち主の役割や所属が足りなければ断る。

行の右の「だれでも」「運営」「管理者」は、その scope を持てる人。「MCP」の札は AI からつなぐときに許可を求められる scope、「既定」の札は AI が範囲を指定せずに許可を求めたときに当てる scope(だれでも持てるものだけで、運営の範囲は AI が名指しで求めたときだけ)。

  • 募集boshuMCP既定だれでも
  • プログラム・コンテンツ企画の下書きcontentMCP既定だれでも
  • 会社ページ・メンバーの下書きcompanyMCP既定だれでも
  • 当日パスのテンプレート下書きpassesMCP既定だれでも
  • チケット登録リンクの読み取り(イベントの管理者)ticketsだれでも

運営だけが持てる scope は、運営の役割でログインしているときだけこの表に出る。

AI からつなぐ(OAuth)

Claude・ChatGPT・Claude Code・Codex などの AI を BOUNTY につなぐときの仕組み。利用者はトークンを貼らず、AI の画面から BOUNTY のログイン画面へ移り、ログインして許可を押すだけでつながる。

許可の画面には、つなごうとしているアプリの名前と、許す範囲(scope)が出る。範囲は本人が持てるものまでに絞られ、運営でない人に運営の範囲は出ない。許可したあとも、使うたびに本人の今の権限で絞り直す。

AI が受け取るトークンは MCP の入口の中からだけ使える。期限が来ると AI のクライアントが更新用のトークンで新しいものを受け取り、更新のたびに古い更新用トークンは使えなくなる。使い終わった古い更新用トークンがもう一度使われたら、その連携ごと止める。

  1. AI クライアント → BOUNTY: 登録 /api/oauth/register
  2. AI クライアント → 本人: /oauth/authorize · S256
  3. 本人 → BOUNTY: ログイン・同意
  4. BOUNTY → AI クライアント: code(1 分)
  5. AI クライアント → BOUNTY: /api/oauth/token · verifier
  6. BOUNTY → AI クライアント: access 1 時間 · bty_ort_… 30 日
  7. AI クライアント → BOUNTY: /mcp · Bearer

図の読み方: 左から AI、本人、BOUNTY。上から順に、AI が自分を登録し、本人をログイン画面へ送り、本人がログインして許可すると、AI は短い間だけ使える引換券(code)を受け取り、それをトークンに換えて MCP を呼ぶ。点線は BOUNTY から返ってくるもの。

API トークン(運営の管理者が発行)

API トークンは、運営の管理者が「API トークン」の画面で発行する。外部のシステム(SPIKES の別のサービスや、運営が使う自動化の仕組みなど)から BOUNTY の API を呼ぶためのもの。

トークンは発行した管理者を持ち主として動く。つまりトークンを渡すことは、選んだ scope の範囲で自分の権限を貸すことになる。持ち主が運営の役割を外れると、運営の範囲の呼び出しは断られる。

発行と失効の手順

  1. API トークンの画面で「発行」を押す。
  2. 名前(どこで使うかが分かる名前)を付け、使う scope だけを選び、期限を選んで「発行する」を押す。
  3. トークンが一度だけ表示される。その場でコピーして、渡す先の設定へ貼る。この画面を閉じると二度と表示されない。
  4. 使わなくなったら、一覧の行のメニューから「失効」を選ぶ。失効はすぐに効き、元に戻せない。
  1. 運営 → BOUNTY: 発行(scope を選ぶ)
  2. BOUNTY → 運営: bty_pat_…(1 度だけ表示)
  3. 外部システム → BOUNTY: Bearer bty_pat_…
  4. BOUNTY: scope · 持ち主の今の権限
  5. BOUNTY → 外部システム: 応答 · 401 / 403
  6. 運営 → BOUNTY: 失効

図の読み方: 左から運営、BOUNTY、外部システム。運営が scope を選んで発行し、表示されたトークンを外部システムに設定する。外部システムがトークンを付けて呼ぶと、BOUNTY は scope と持ち主の今の権限を確かめてから答える。足りなければ断る。最後に運営が失効させると、それ以降は使えない。

外部のサービスにトークンを渡すとき

運営メンバーが、外部のサービスや業者、別のチームの仕組みに BOUNTY のトークンを渡すときの手順。渡す前に、本当にトークンが要るかを確かめる。AI から使うだけなら、トークンを渡さずに MCP のログインでつなぐほうが安全。

渡す手順

  1. 渡す先ごとに一つずつ発行する。複数の相手で一つのトークンを使い回さない(一つを止めたいときに全部が止まる)。
  2. 名前に渡す相手と用途を書く。一覧を見たときに、どれを止めればよいか分かるようにする。
  3. scope は相手が使うものだけにする。迷ったら狭く始め、足りなければ発行し直す。
  4. 期限を付ける。期限なしは、常に動き続ける仕組みで、止め方が決まっているときだけにする。
  5. トークンはチャットやメールに貼らず、相手の設定画面や鍵の保管庫へ直接入れてもらう。

注意

  • トークンは発行した人として動く。相手が呼んだ操作は、監査の記録に発行した人の操作として残る。
  • トークンが漏れたかもしれないときは、すぐに失効させてから新しく発行する。失効は待たずに効く。
  • 相手との取引や作業が終わったら、その日のうちに失効させる。
  • OAuth を使えない相手には、トークンを手渡しする代わりに「MCP 接続リンク」を使える。リンクにはトークンが入っておらず、受け取った本人がログインして自分のトークンを発行する。リンクを取り消すと、そこから発行したトークンも止まる。

止め方

止め方は、トークンの種類で場所が違う。

認証とトークン | Bounty Developer