OAuth 2.0 — パスワードを渡さず「許可証」だけ貸す
「Googleでログイン」「Googleの連絡先を読み込む」——こうした連携で、もしアプリにGoogleのパスワードをそのまま渡したらどうなるでしょう。アプリは何でもできてしまうし、パスワードが漏れたら一巻の終わりです。
そこで OAuth 2.0 は、パスワードの代わりに「時間限定・用途限定の許可証(アクセストークン)」を渡します。家の合鍵ではなく、「1時間だけ、連絡先だけ見られるQRコード」を発行するイメージです。その受け渡しは4者のキャッチボールで進みます。下の図1で1ステップずつ追ってみてください。
「コード」と「トークン」の2段構え
一見まわりくどいのは、横取り対策のためです。認可サーバーはまず、ブラウザ経由で認可コード(使い捨ての引換券)をアプリに渡します。ここはURL越しなので盗み見られる危険があります。だからコード単体では役に立たず、アプリは裏チャネルで「コード+自分だけの秘密鍵」を送って初めてアクセストークンと交換できます。コードだけ盗まれても、秘密鍵が無ければトークンは手に入りません。
そして肝心なのは、あなたがログイン情報を入力する相手は認可サーバー(Google)だけだということ。アプリはその画面に一切タッチせず、最後に受け取るのも「連絡先の閲覧だけ・1時間だけ」のように絞られたトークンです。だから安全に権限を「貸し出す」ことができます。これが認可コードフローと呼ばれる、OAuthの王道の流れです。
- 認可コード
- 認可サーバーが最初に渡す使い捨ての引換券。単体では使えず、トークンと交換する。
- アクセストークン
- データ取得に使う時間限定・用途限定の許可証。パスワードの代わりにアプリが持つ。
- スコープ
- 「連絡先の閲覧だけ」など、許可する範囲。トークンにできることを絞る。
- 認可サーバー
- 本人確認と同意を受け持ち、コードやトークンを発行する係(Googleなど)。
まとめ
OAuth 2.0 は、パスワードを渡さずに「限定的な許可」だけを安全に貸す仕組みです。図1で見たように、本人がログインするのは認可サーバーだけ。アプリは使い捨てコードを秘密鍵付きで交換し、時間と用途を絞ったトークンを受け取ってデータにアクセスします。「〇〇でログイン」の裏側では、この4者のキャッチボールが毎回走っているのです。