OAuth 2.0認証
OAuth 2.0は認可フレームワークであり、保護されたリソースへのアクセスを認可するための事実上の標準となっています。サードパーティアプリケーションがユーザーの資格情報を公開することなくユーザーデータにアクセスできるようにします。パスワードを共有する代わりに、サービスはトークンを提供します。
背景
Googleアカウントのデータにアクセスする必要があるサードパーティアプリケーションを使用したいと想像してください。このサードパーティアプリにGoogleのユーザー名とパスワードを提供したくないですよね?ここでOAuthの出番です。Googleの資格情報を共有することなく、このアプリケーションにGoogleデータへのアクセスを許可できます。
OAuth 2.0の基本
OAuth 2.0は、Webアプリケーション、デスクトップアプリケーション、携帯電話、リビングルームデバイス向けの特定の認可フローを提供しながら、クライアント開発者の簡潔さに焦点を当てています。簡略化した解説は以下の通りです:
リソースオーナー:アプリケーションが自分のアカウントにアクセスすることを認可するユーザー。アプリケーションのユーザーアカウントへのアクセスは、付与された認可の「スコープ」に限定されます(例:特定のタイプのデータの読み取りまたは書き込み)。
クライアント:ユーザーのアカウントにアクセスしたいアプリケーション。アクセスするためには、ユーザーによって認可され、その認可がAPIによって検証される必要があります。
リソースサーバー:ユーザーアカウントをホストするサーバー。アクセストークンを使用して保護されたリソースリクエストを受け入れ、応答できます。
認可サーバー:このサーバーはユーザーのIDを検証し、アプリケーションにアクセストークンを発行します。
OAuth 2.0のフロー
異なるタイプのアプリケーションやユースケースに対して、いくつかの「フロー」または「グラントタイプ」があります:
認可コード(Webサーバー上で実行されるアプリ向け):これは最も一般的なフローで、特にWebアプリ向けです。ユーザーをサービスにリダイレクトし、ログインします。ログイン後、認可コードとともにアプリケーションにリダイレクトされ、アプリケーションはそのコードをアクセストークンと交換できます。
インプリシット(ブラウザで実行されるアプリ向け):このフローはユーザーエージェントベースのアプリ(例:シングルページアプリ)向けで、追加の認可コード交換ステップなしにアクセストークンが直接返されます。
リソースオーナーパスワードクレデンシャル:このフローでは、アプリケーションがユーザーのユーザー名とパスワードを直接提供できます。ユーザーの資格情報の共有を伴うため、信頼できるアプリケーションにのみ推奨されます。
クライアントクレデンシャル:クライアント自体がリソースオーナーである場合に使用されます。例えば、クライアントがバックグラウンドサービスの場合です。
トークン
ユーザーの資格情報を使用する代わりに、OAuth 2.0はトークンを使用します。2つのタイプがあります:
アクセストークン:ユーザーの代わりにアプリケーションがAPIリクエストを行うことを許可します。有効期間は短いです。
リフレッシュトークン:元のアクセストークンが期限切れの場合、新しいアクセストークンを取得するために使用できます。アクセストークンよりも有効期間が長いです。
セキュリティ
OAuth 2.0はセキュリティのためにSSL/TLSに依存しています。クライアント、認可サーバー、リソースサーバー間のデータの機密性を確保します。攻撃者がアクセストークンを傍受しても、その有効期限(通常は短い期間)を超えて、または発行されたスコープ外では使用できません。
まとめ
OAuth 2.0は、サードパーティアプリケーションがユーザーの資格情報を公開することなくユーザーデータにアクセスできるようにする、強力で柔軟なフレームワークです。さまざまなサービスやアプリケーション間で権限を付与・管理するための安全で効率的な手段をユーザーと開発者に提供し、現代のWebにおける不可欠なツールとなっています。