TL;DR

サードパーティのアプリケーションが、HTTP サービスへの限られたアクセス権を得るための認可フレームワーク。IETF の RFC 6749 で定められている。

なぜ必要か

RFC 6749 によると、従来のクライアント・サーバ型の認証では、サードパーティのアプリケーションがリソースオーナーの認証情報(パスワード)を保存する必要があった。この方法には次の問題がある。

  • サードパーティに必要以上に広いアクセス権を与えてしまう
  • パスワードを変えない限り、特定のサードパーティだけのアクセスを取り消せない
  • どれか 1 つのサードパーティが侵害されると、ユーザのパスワードとデータが漏れる

仕組み

OAuth 2.0 には 4 つのロールがある。

  • リソースオーナー: 保護されたリソースへのアクセスを許可できる主体
  • リソースサーバ: 保護されたリソースを持つサーバ
  • クライアント: リソースオーナーの代わりにリソースを要求するアプリケーション
  • 認可サーバ: リソースオーナーを認証したあと、クライアントにアクセストークンを発行するサーバ

アクセストークンは、クライアントに与えられた認可を表す文字列である。クライアントはまずリソースオーナーに許可を求め、認可グラントを受け取る。そのグラントを認可サーバに示してアクセストークンを受け取り、トークンを使ってリソースサーバにリソースを要求する。

認可グラントには、認可コード、インプリシット、リソースオーナーのパスワード認証情報、クライアント認証情報の 4 種類がある。

注意点

OAuth 2.0 は認可のための仕組みである。認証を扱うには、拡張プロトコルの OpenID Connect を使う。

関連

出典