OAuthとは / OAuthのロールについて
この記事では以下の3つをまとめます。
- OAuthとは何なのか
- OAuthはなぜ必要なのか
- 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のWeb API |
クライアント | Instagramアプリ / サードパーティアプリ |
認可サーバー | Facebookの認証・認可サーバー |