OAuth 2.0とは?仕組み・認可コードフローをわかりやすく解説|OpenID Connectとの違いも紹介

OAuth 2.0とは?一言でいうと「合鍵を渡さずにサービスを連携する仕組み」

OAuth 2.0(オーオース 2.0)は、ユーザーのパスワードを第三者に渡すことなく、外部サービスにデータへのアクセス権限を委譲するための認可フレームワークです。2012年にRFC 6749として標準化されました。

たとえるなら、ホテルのカードキーに似ています。マスターキー(パスワード)を他人に渡す代わりに、「この部屋だけ」「チェックアウトまで」という制限付きのカードキーを発行する——OAuth 2.0はこのような限定的なアクセス許可を実現します。

身近な例としては、「Googleアカウントでログイン」「GitHubでサインイン」といったソーシャルログインの裏側でOAuth 2.0が動いています。

なぜOAuth 2.0が必要なのか?パスワード共有の危険性

OAuth 2.0が登場する以前、サービス連携にはユーザーのIDとパスワードを直接渡す方法が一般的でした。しかし、この方法には重大な問題があります。

問題点 具体的なリスク
パスワード漏洩 連携先がハッキングされると、元のサービスのパスワードも流出する
権限の制御不可 パスワードを渡すと全権限を与えることになり、「読み取りだけ」などの制限ができない
取り消しが困難 連携を解除するにはパスワード変更が必要で、他の連携にも影響する

OAuth 2.0はアクセストークンという一時的な「許可証」を使うことで、これらの問題をすべて解決しています。

OAuth 2.0の登場人物(4つのロール)

OAuth 2.0を理解するには、まず4つの登場人物を押さえましょう。

ロール 役割 具体例
リソースオーナー データの持ち主(=ユーザー) Googleアカウントを持つあなた
クライアント データにアクセスしたいアプリ Notionやslackなどの外部アプリ
認可サーバー アクセス許可を管理し、トークンを発行 Googleの認可サーバー
リソースサーバー 実際のデータを保持するサーバー Google Drive API、Gmail API

認可コードフロー:最も安全な標準フロー

OAuth 2.0にはいくつかのフロー(認可の手順)がありますが、Webアプリケーションで最も推奨されるのが認可コードフロー(Authorization Code Flow)です。

フローの流れ(5ステップ)

Step 1:ユーザーがクライアントアプリで「Googleでログイン」ボタンをクリック

Step 2:クライアントがGoogleの認可サーバーにリダイレクト。ユーザーは「このアプリにメール閲覧を許可しますか?」という画面で同意する

Step 3:認可サーバーがクライアントに認可コード(一時的なコード)を返す

Step 4:クライアントが認可コードを使って、バックエンドから認可サーバーにアクセストークンを要求

Step 5:アクセストークンを使って、リソースサーバー(Gmail APIなど)からデータを取得

ポイントは、アクセストークンがブラウザに直接露出しない点です。認可コードを中継することで、トークンの漏洩リスクを最小化しています。

その他の主要フロー

フロー名 用途 特徴
クライアントクレデンシャル サーバー間通信(ユーザー不在) マシン対マシンの認可に使用
PKCE付き認可コード モバイルアプリ・SPA 認可コードフローをパブリッククライアント向けに強化
デバイスコード スマートTVやIoTデバイス キーボード入力が困難なデバイス向け

OAuth 2.0とOpenID Connectの違い

OAuth 2.0と混同されやすいのがOpenID Connect(OIDC)です。両者の違いを整理しましょう。

比較項目 OAuth 2.0 OpenID Connect
目的 認可(このアプリにデータアクセスを許可) 認証(このユーザーが本人であることを確認)
発行するもの アクセストークン アクセストークン+IDトークン
ユーザー情報 標準的な取得方法は未定義 UserInfoエンドポイントで標準化
関係性 基盤の仕組み OAuth 2.0の上に構築された拡張

簡単にいうと、OAuth 2.0は「何を許可するか」を扱い、OpenID Connectは「誰であるか」を扱う仕組みです。「Googleでログイン」の裏側では、OAuth 2.0 + OpenID Connectが組み合わされています。

スコープとトークン:アクセス制御の仕組み

スコープ(権限の範囲)

OAuth 2.0ではスコープを使って、アプリに与える権限を細かく制御します。たとえばGoogle APIでは以下のようなスコープがあります。

  • email:メールアドレスの読み取り
  • profile:基本プロフィール情報の読み取り
  • https://www.googleapis.com/auth/drive.readonly:Google Driveの読み取り専用

ユーザーは同意画面で「このアプリに○○を許可します」という形で、どのスコープを許可するか選択できます。

トークンの種類

トークン 役割 有効期間
アクセストークン APIへのアクセスに使用 短い(数分〜数時間)
リフレッシュトークン アクセストークンの再発行に使用 長い(数日〜数ヶ月)

アクセストークンの有効期間を短く設定し、リフレッシュトークンで更新する設計により、万が一トークンが漏洩しても被害を最小限に抑えられます。

よくある質問(FAQ)

Q. OAuth 2.0は「認証」のプロトコルですか?

いいえ。OAuth 2.0は「認可」のフレームワークです。「誰であるか」を確認する認証機能は含まれていません。認証が必要な場合はOAuth 2.0の上に構築されたOpenID Connectを使います。

Q. OAuth 1.0とOAuth 2.0の違いは?

OAuth 1.0は署名ベースで実装が複雑でしたが、OAuth 2.0はHTTPS前提でシンプルになりました。また、OAuth 2.0ではモバイルアプリやSPAなど多様なクライアント種別に対応するフローが追加されています。現在、新規開発ではOAuth 2.0が標準です。

Q. 開発者としてOAuth 2.0を実装するには?

自前で実装するのはセキュリティリスクが高いため、Auth0、Firebase Authentication、AWS Cognitoなどのマネージドサービスの利用が推奨されます。どうしても自前実装が必要な場合は、OAuthライブラリ(Spring Security、Passport.jsなど)を活用しましょう。

まとめ:OAuth 2.0はモダンWeb開発の必須知識

OAuth 2.0は、パスワードを共有せずにサービス間のデータ連携を安全に実現する認可フレームワークです。ソーシャルログインやAPI連携など、現代のWebサービスのほとんどがOAuth 2.0に依存しています。認可コードフロー、スコープ、トークンの概念を理解することで、セキュアなアプリケーション設計ができるようになります。

コメント