OAuthとは / OAuthのロールについて

Icon

70_10

この記事では以下の 3 つをまとめます。

  1. OAuth とは何なのか
  2. OAuth はなぜ必要なのか
  3. OAuth のロール

1. OAuth とは何なのか

RFC6749 にはこう記載されています。

The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service,

日本語に訳すとこのようになります。

OAuth 2.0 はサードパーティアプリケーションによる HTTP サービスへの限定的なアクセスを可能にする認可フレームワークである。

限定的なアクセスとは

限定的なアクセスとは、HTTP サービスが提供する機能の一部のみが利用できることです。
Instagram を例にすると、ユーザーの画像や動画を取得する Read 権限が与えられており写真や動画の投稿をする Write 権限を与えていないという状態です。

認可とは

認可とは、「権限を許可すること」を意味しています。
つまり、ユーザーがアプリケーションに対してあるサービスの利用を許可することを指します。

認証とは違う

認証とは、「誰であるかを証明すること」を意味します。
つまり、ユーザー ID とパスワード、生体情報を持ってユーザー本人であることを実証することを指します。

OAuth は認証については定義していない

認可するには認証が完了している必要があります。
OAuth では認証についての定義はしていません。認証をどう行うかはそのサービスに任せています。

2. OAuth はなぜ必要なのか

ユーザーはサードパーティアプリに認証情報(ユーザー ID / パスワード)を教えることなく、HTTP サービスを利用させることができるようになることが最大の利点です。

サードパーティアプリに認証情報を教えると問題が起こる

攻撃対象者が増える

認証情報を盗み取ろうとするとき、認証情報を管理している HTTP サービスだけでなくサードパーティアプリも対象となります。
盗み取れる場所が増えてしまいます。

サードパーティアプリにすべての権限が与えられる

認証情報を知っているということは、HTTP サービスに対してすべての権限を利用できることになります。
限定的なアクセスが実現できないということです。
もし、サードパーティアプリが悪意のあるアプリだったとしたら…?

OAuth を利用していれば、サードパーティアプリがもし悪意のあるアプリだったとしても権限を失効することで防げます。

漏洩対策が大変

攻撃場所・漏洩場所が増えるだけでなく、認証情報が盗み取られた・漏洩した場合の対応も大変になります。
サードパーティアプリから漏洩すると、認証情報の更新(パスワードの更新)をするしかありません。
また、このパスワードをユーザーがいろんなサービスで使いまわしていたとしたら、二次災害も発生するでしょう。

OAuth を利用していれば、漏洩対策は HTTP サービスのみを考慮するだけでよくなります。

3. OAuth のロール

リソース

ユーザー情報や写真、動画などのデータを指します。

リソースオーナー

ユーザ情報や写真などのリソースの所有者を指します。
ほとんどの場合がユーザーにあたります。

リソースサーバー

リソースを提供するサービスを指します。
リソースオーナーが許可したアクセスのみを受け付けます。

クライアント

リソースサーバーを利用するアプリケーションを指します。
リソースオーナーから権限移譲の許可が得られないとリソースの利用はできません。

認可サーバー

クライアントへリソースサーバーからアクセスするためのトークンをサービスを指します。
トークンはリソースオーナーからの許可が得られないと発行できません。

例えば

Instagram

ロール対象
リソースユーザー情報 / 写真 / 動画 など
リソースオーナーユーザー
リソースサーバーInstagram の Web API
クライアントInstagram アプリ / サードパーティアプリ
認可サーバーFacebook の認証・認可サーバー

参考文献・書籍