CTS-KB

OAuth 2.0

おーおーす

OAuth2 RFC 6749
#認可 #OAuth #API #セキュリティ #標準仕様

Web アプリケーション向けの 認可(Authorization) フレームワーク。RFC 6749 / 6750 (2012 年 10 月)。ユーザーがパスワードを第三者サービスに渡さずに API への委任アクセスを認める仕組みを標準化した。

概要

OAuth 1.0 (2007 年)の 「リクエスト署名が必須で実装が難しい」 という弱点を解消するため、 TLS を必須にすることで署名を不要化 したのが OAuth 2.0。これによりエコシステムが爆発的に拡大し、Facebook ログイン・Google ログイン・GitHub OAuth 等のソーシャルログインのほぼすべてが OAuth 2.0 をベースとしている。

重要な誤解:認証ではなく「認可」

仕様役割
OAuth 2.0認可(Authorization)— 「この API を叩いてよい」
OpenID Connect認証(Authentication)— 「この人は誰だ」

OAuth 2.0 のアクセストークンは 「この API を叩く権利を持つ何か」 を表すが、 「誰が叩いているか」は保証しない 。認証目的に流用すると Confused Deputy 攻撃などの脆弱性を招くため、認証が必要なら OpenID Connect を併用するのが現代の正解。

主な Grant Type

フロー用途
Authorization Codeサーバーサイド Web アプリ。最も推奨
Authorization Code + PKCESPA・モバイル。 OAuth 2.1 で全クライアント必須
Client Credentialsサーバー間通信(マシン間認証)
Refresh Tokenアクセストークン更新
Implicit FlowOAuth 2.1 で廃止
Resource Owner PasswordOAuth 2.1 で廃止

構成要素

  • Resource Owner — リソースの所有者(通常はエンドユーザー)
  • Client — リソースにアクセスしたいアプリケーション
  • Authorization Server — 認可コード・トークンを発行するサーバー
  • Resource Server — 保護されたリソース(API)を提供するサーバー

関連用語

  • OpenID Connect — OAuth 2.0 上の認証層
  • PKCE — 認可コード横取り対策の必須拡張
  • ID Token — OIDC が発行する認証情報
  • AWS Cognito — OAuth 2.0 / OIDC をネイティブ実装

外部リソース