認証・ID管理

OAuth 2.0 おーおーす2.0

OAuth認可アクセストークンAPI認可委任フロー
OAuth 2.0について教えて

簡単に言うとこんな感じ!

「Googleのアカウントで他のサービスにログイン」するときに裏で動いている認可の仕組みだよ。パスワードを渡さずに「この操作だけ許可する」という限定的なアクセス権を第三者サービスに委任できるんだ!


OAuth 2.0とは

OAuth 2.0(Open Authorization 2.0) は、リソースオーナー(ユーザー)がパスワードを渡すことなく、第三者アプリに特定のリソースへのアクセスを委任するための認可フレームワークです。

重要なのは、OAuth 2.0は認証(Authentication:あなたは誰か) ではなく 認可(Authorization:あなたは何をしていいか) のプロトコルだという点です。「Googleでログイン」に見えても、OAuth 2.0だけでは認証は完了しておらず、認証まで対応するには OpenID Connect(OIDC)が必要です。

実務でよく見る使用例:

  • 「Googleアカウントで〇〇にログイン」
  • SlackやGitHubへのサードパーティアプリ連携
  • スマートフォンアプリがGoogleカレンダーのデータを読む

OAuth 2.0の主なグラントタイプ(フロー)

グラントタイプ用途特徴
Authorization CodeWebアプリ・ネイティブアプリ最も安全。認可コード経由でトークン取得
Authorization Code + PKCESPAやモバイルアプリAuthorization Codeの拡張。シークレットなしで安全
Client Credentialsサーバー間通信・マイクロサービスユーザー不在のM2M通信向け
Device CodeスマートTV・IoT機器ブラウザ操作が難しいデバイス向け
Implicit(非推奨)SPAで使われたが現在はPKCEに移行

歴史と背景

  • 2007年:TwitterとMa.gnoliaがAPI認可の問題を議論し、OAuth 1.0のドラフト作成
  • 2010年:OAuth 1.0がRFC 5849として標準化
  • 2012年:OAuth 2.0がRFC 6749/6750として標準化(1.0とは互換性なし)
  • 2013年〜:Google・Facebook・GitHubがOAuth 2.0を採用し急速に普及
  • 2019年:OAuth 2.0 Security BCP(RFC 9700)が策定されPKCEが推奨に
  • 2023年:OAuth 2.1のドラフトで非推奨フローを整理・集約

OAuth 2.0 Authorization Codeフローの概要

ユーザー (Resource Owner) クライアント (サードパーティアプリ) 認可サーバー (Google等) ① 認可リクエスト(scope指定) ② ログイン画面表示(ユーザーが認証・同意) ③ 認可コード発行 ④ コードをアクセストークンに交換 ⑤ アクセストークン返却 ⑥ アクセストークンでAPIを呼び出す (Bearerトークンとして使用)

関連する規格・RFC

規格・RFC番号内容
RFC 6749OAuth 2.0 Authorization Framework
RFC 6750Bearer Token Usage
RFC 7636PKCE(Proof Key for Code Exchange)
RFC 8252OAuth 2.0 for Native Apps

関連用語

  • OpenID Connect — OAuth 2.0を拡張して認証機能を追加したプロトコル
  • JWT — OAuth 2.0のアクセストークンとして広く使われる形式
  • SSO — OAuth 2.0/OIDCを使って実現するシングルサインオン
  • APIキー — OAuth 2.0のアクセストークンと比較される認証方式