「コールバック」という言葉は、ログインの設定、決済サービスの連携、Webhook、プログラムの非同期処理など、いろいろな場面で出てきます。なんとなく分かったつもりでいても、いざ説明しようとすると言葉にしにくいものです。検索すると、たいていは「関数の引数に渡す関数」というプログラミングの説明が出てきますが、それだけでは、ログインの「コールバック URL」や Webhook とのつながりが見えません。この記事では、それらに共通する考え方を整理します。
ひとことで言うと
コールバックは、「終わったら、ここに知らせて(ここへ戻して)」と、先に連絡先を渡しておく仕組みです。電話の「折り返しお電話ください」と同じ考え方です。
なぜ要るのか(ポーリングとの比較)
自分ではいつ終わるかわからない処理や、途中で自分の手を離れる処理があります。その結果を受け取る方法は、大きく 2 つです。
| やり方 | たとえ | 弱いところ |
|---|---|---|
| こちらから何度も聞きに行く(ポーリング) | 「まだですか?」と何度も電話する | 無駄が多い。終わってから気づくまでに遅れが出る |
| 終わったら相手から知らせてもらう(コールバック) | 「終わったらこの番号に折り返してください」 | 連絡先を先に渡しておく必要がある。知らせてきた相手が本物かを確かめる必要がある |
使われる場面(3 種類)
1. ブラウザを戻してもらうコールバック
利用者が、いったん別のサイトへ行くときに使います。
- ログイン(OAuth・SSO):Web アプリ → Microsoft や Google のログイン画面でログイン → Web アプリの
/callbackに戻る - ネットの支払い:お店 → 決済会社の画面で支払い → お店の「完了」ページに戻る
- 「Google でログイン」「GitHub でログイン」のボタン全般
ほかのサイトに一度渡した利用者を、結果と一緒に、こちらへ戻してもらいます。
2. サーバーどうしのコールバック(Webhook)
何かが起きたら、相手のサーバーがこちらの URL を呼ぶものです。
- GitHub:push されたら、CI のサーバーへ知らせる
- 決済会社:支払いが確定したら、お店のサーバーへ知らせる
- チャットツール(Slack・Teams など)の Webhook:ほかのシステムからチャットに書き込む
- Microsoft Graph の変更通知:「OneDrive のファイルが変わったら知らせて」
3. プログラムの中のコールバック
関数を渡しておき、あとで呼んでもらうものです。
- 「ボタンが押されたら、この関数を動かして」
- 「ダウンロードが終わったら、この関数を動かして」
検索でよく出てくるのはこれです。上の 2 つも、考え方の元は同じです。
どれにも共通する、大事な 2 点
- 連絡先は前もって登録しておく。 たとえば、Microsoft(Entra ID)や Google のログインを使うアプリは、戻り先の URL(リダイレクト URI)を前もって登録します。登録したところ以外には戻さないためです。ここを自由にすると、攻撃者の URL へ結果を送らせることができてしまいます。
- 知らせてきた相手を確かめる。 コールバックの URL は、誰でも呼べます。だから、本物かを確かめる印が要ります。ログインでは
stateや PKCE、Webhook では署名や共有の秘密がその役です。
例:OAuth のログインでのコールバック
Web アプリが、Microsoft のログインを使って、利用者の権限でデータを読む場合の流れです。
- 利用者が、Web アプリで「Microsoft でログイン」を押す
- Web アプリは、利用者のブラウザを Microsoft のログイン画面へ転送する。このとき、URL に「ログインが済んだら
https://app.example.com/oauth/callbackに戻してください」と書いておく - 利用者が、Microsoft の画面でログイン・同意する。この間、Web アプリは何もできず、利用者がいつ戻ってくるかもわからない
- Microsoft は、ブラウザを
https://app.example.com/oauth/callback?code=…&state=…に戻す。これが折り返しの電話 - Web アプリは、受け取ったコード(トークンの引換券)を、サーバーどうしの直接のやりとりで、本物のトークンに替える
2 で渡した戻り先の URL が、2 番目に書いた「前もって登録しておく連絡先」です。4 の state が、「知らせてきた相手を確かめる印」です。4 でブラウザが運ぶのは引換券だけで、トークンそのものではありません。ブラウザを通るものは、履歴やログに残ったり、見られたりする危険があるからです。
まとめ
- コールバックは「終わったら、ここに知らせて」と、先に連絡先を渡しておく仕組み
- ポーリング(何度も聞きに行く)の無駄と遅れをなくせる
- ブラウザを戻すもの(ログイン・決済)、サーバーどうし(Webhook)、プログラムの中(関数)の 3 種類がある
- どれも「連絡先を前もって登録する」「知らせてきた相手を確かめる」の 2 点が大事
