FIG-054

OAuth 2.0 — パスワードを渡さず「許可証」だけ貸す

セキュリティ 2026.06.25 公開 読了 約12分

「Googleでログイン」「Googleの連絡先を読み込む」——こうした連携で、もしアプリにGoogleのパスワードをそのまま渡したらどうなるでしょう。アプリは何でもできてしまうし、パスワードが漏れたら一巻の終わりです。

そこで OAuth 2.0 は、パスワードの代わりに「時間限定・用途限定の許可証(アクセストークン)」を渡します。家の合鍵ではなく、「1時間だけ、連絡先だけ見られるQRコード」を発行するイメージです。その受け渡しは4者のキャッチボールで進みます。下の図1で1ステップずつ追ってみてください。

PLAYERS — 4者のあいだで許可証を受け渡す
🙂 あなた ユーザー
📱 アプリ クライアント
🔐 認可サーバー Google等
📦 リソース データ置き場
スタート前
STEP 0 / 8
「Googleでログイン」を押す前
これから、アプリがあなたのデータにアクセスする許可をもらうまでの流れを追います。ポイントは パスワードがアプリに渡らない こと。「次へ」を押して進めましょう。
図1 — パスワードは認可サーバーにしか渡らない。アプリが受け取るのは時間限定のトークンだけ

「コード」と「トークン」の2段構え

一見まわりくどいのは、横取り対策のためです。認可サーバーはまず、ブラウザ経由で認可コード(使い捨ての引換券)をアプリに渡します。ここはURL越しなので盗み見られる危険があります。だからコード単体では役に立たず、アプリは裏チャネルで「コード+自分だけの秘密鍵」を送って初めてアクセストークンと交換できます。コードだけ盗まれても、秘密鍵が無ければトークンは手に入りません。

そして肝心なのは、あなたがログイン情報を入力する相手は認可サーバー(Google)だけだということ。アプリはその画面に一切タッチせず、最後に受け取るのも「連絡先の閲覧だけ・1時間だけ」のように絞られたトークンです。だから安全に権限を「貸し出す」ことができます。これが認可コードフローと呼ばれる、OAuthの王道の流れです。

用語ミニ辞書
認可コード
認可サーバーが最初に渡す使い捨ての引換券。単体では使えず、トークンと交換する。
アクセストークン
データ取得に使う時間限定・用途限定の許可証。パスワードの代わりにアプリが持つ。
スコープ
「連絡先の閲覧だけ」など、許可する範囲。トークンにできることを絞る。
認可サーバー
本人確認と同意を受け持ち、コードやトークンを発行する係(Googleなど)。

まとめ

OAuth 2.0 は、パスワードを渡さずに「限定的な許可」だけを安全に貸す仕組みです。図1で見たように、本人がログインするのは認可サーバーだけ。アプリは使い捨てコードを秘密鍵付きで交換し、時間と用途を絞ったトークンを受け取ってデータにアクセスします。「〇〇でログイン」の裏側では、この4者のキャッチボールが毎回走っているのです。