MENU

OAuth 2.0 — 「パスワードを渡さずに権限委譲する」業界標準プロトコル

OAuth 2.0 アイキャッチ
OAuth 2.0

OAuth 2.0は2012年にRFC 6749として標準化された、認可(Authorization)のためのプロトコルです。「他社サービスに自分のデータへのアクセスを許可するとき、パスワードを渡さずに済む」という発想で生まれ、「Googleでログイン」「GitHubで連携」のような体験を支える土台になっています。認証(誰か)ではなく認可(何ができるか)を扱うプロトコルである点を最初に押さえておきましょう。

目次

この記事の目次

  1. OAuth 2.0の主要登場人物
  2. 代表的なフロー
  3. OAuth 2.0とOpenID Connect
  4. セキュリティ上の注意点
  5. まとめ

OAuth 2.0の主要登場人物

OAuth 2.0の主要登場人物

OAuth 2.0には主に4つの登場人物がいます。Resource Owner(本人ユーザー)、Client(許可を求める3rdパーティアプリ)、Authorization Server(許可を発行するサーバ=Google等)、Resource Server(実際にデータを持つAPI)。

本人は Authorization Server に「このアプリにこの権限を与えていいですよ」と同意し、ClientはアクセストークンをもらってResource Serverへアクセスする、という構図です。「鍵束を渡す代わりに、限定的な合鍵を出す」イメージが分かりやすい比喩です。

代表的なフロー

代表的なフロー

OAuth 2.0には複数のフロー(Grant Type)があり、Clientの種類に応じて使い分けます。サーバサイドWebアプリは Authorization Code フローが基本、モバイル/SPAは PKCE 付きの Authorization Code フロー、サーバ間連携は Client Credentials フロー、というのが現代の標準です。

古い Implicit / Resource Owner Password Credentials フローは脆弱性の懸念があるため非推奨化が進んでおり、OAuth 2.1(草案)では削除される予定。新規実装ではPKCE付きのAuthorization Codeを使うのが最も安全です。

OAuth 2.0とOpenID Connect

OAuth 2.0とOpenID Connect

OAuth 2.0は認可プロトコルなので、「このトークンを持っているのが誰か」までは規定しません。ここを補うのがOpenID Connect(OIDC、2014年標準化)で、OAuth 2.0を拡張して認証情報(IDトークン)を運べるようにします。

「Googleでログイン」「Microsoftでログイン」のようなフェデレーション認証はOIDCが裏で動いています。OAuth 2.0 = 認可、OIDC = 認証、と覚えると整理しやすくなります。

セキュリティ上の注意点

セキュリティ上の注意点

OAuth 2.0は柔軟な反面、実装ミスがそのままセキュリティ事故に直結します。Redirect URIの厳密チェック(オープンリダイレクト防止)、State パラメータでのCSRF対策、PKCEの導入、アクセストークンの有効期間を短くしてRefresh Tokenで延長する設計などが基本です。

可能な限り認証基盤は自作せず、Auth0 / Okta / Firebase Authentication / Amazon Cognitoなどの既存ID基盤を使うのが定石。OAuth 2.0は仕様が複雑で、自前実装で穴を作るリスクが高い領域です。

まとめ

OAuth 2.0はモダンWeb・モバイルの認可基盤として欠かせないプロトコルです。OpenID Connectと併せて押さえると、Web開発における認証認可の地図がはっきり見えます。「Googleでログイン」の裏側を理解できる開発者を目指しましょう。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次