Overview
主要概念
- Auth0は、Internet Engineering Task Force (IETF) が策定したOAuth 2.0プロトコルをサポートしています。
- OAuth 2.0仕様の役割、グラントタイプ (またはワークフロー) 、エンドポイントについて説明します。
役割
- リソース所有者: 保護されたリソースへのアクセスを許可できる主体です。通常はエンドユーザーを指します。
- リソースサーバー: 保護されたリソースをホストするサーバーです。つまり、アクセスしたいAPIのことです。
- クライアント: リソース所有者に代わって、保護されたリソースへのアクセスを要求するアプリケーションです。
- 認可サーバー: リソース所有者を認証し、適切な認可を得たうえでアクセストークンを発行するサーバーです。この場合はAuth0です。
グラントタイプ
- Authorization Code Flow: サーバー上で動作する Web アプリで使用されます。モバイルアプリでも、Proof Key for Code Exchange (PKCE) technique を使用して利用されます。
- Implicit Flow with Form Post: ユーザーのブラウザー上で動作する、JavaScript を中心としたアプリ (Single-Page Applications) で使用されます。
- Resource Owner Password Flow: 高い信頼性を前提とするアプリで使用されます。
- Client Credentials Flow: マシン間通信に使用されます。
エンドポイント
/authorize エンドポイントと /oauth/token エンドポイントの 2 つのエンドポイントを使用します。
/authorize エンドポイントは、リソース所有者とやり取りして、保護されたリソースにアクセスするための認可を取得するために使用されます。これを理解しやすくするために、Google アカウントを使ってサービスにログインする場面を想像してみてください。まず、サービスは認証のために Google にリダイレクトします (まだログインしていない場合) 。その後、同意画面が表示され、そのサービスに対して、メールアドレスや連絡先リストなど、あなたのデータ (保護されたリソース) の一部へのアクセスを許可するよう求められます。
/authorize エンドポイントのリクエストパラメータは次のとおりです。
アプリケーションがユーザーを認証するために
/authorize エンドポイントへ最初のリクエストを送る際に、カスタムクエリパラメータを設定できます。カスタムクエリパラメータを使用すると、 のページテンプレートに追加のコンテキストを渡せます。
connection パラメータを使用するには、ID First を有効にする必要があります。connection パラメータと Universal Login の詳細については、Passwordless for Universal Login を参照してください。
ext- で始まるクエリパラメータは、自動的に page template context に表示されます。
このエンドポイントは、Authorization Code グラントタイプ と Implicit グラントタイプ で使用されます。認可サーバーは、アプリケーションがどの グラントタイプ を使いたいかを把握する必要があります。これは、発行する credential の種類に影響するためです。
- Authorization Code grant の場合は、認可コードを発行します (これは後で
/oauth/tokenエンドポイントでアクセストークンと交換できます) 。 - Implicit grant の場合は、アクセストークンを発行します。これは、誰がどのアプリケーションに対してどの permissions (scopes) を認可したかを示す不透明な文字列 (または Auth0 の実装では ) です。
response_type リクエストパラメータを次のように使用します。
- Authorization Code grant の場合は、認可コードを含めるために
response_type=codeを使用します。 - Implicit grant の場合は、アクセストークンを含めるために
response_type=tokenを使用します。代わりにresponse_type=id_token tokenを使用して、アクセストークンと の両方を含めることもできます。
response_mode と呼ばれます。これは任意で、次の値を取ることができます:
トークンエンドポイント
/oauth/token エンドポイントは、アプリケーションがアクセストークンまたは を取得するために使用されます。アクセストークンは直接発行されるため、Implicit Flow を除くすべてのフローで使用されます。
- Authorization Code Flow では、アプリケーションは認可エンドポイントから取得した認可コードをアクセストークンと交換します。
- Client Credentials Flow および Resource Owner Password Credentials Grant Exchange では、アプリケーションは一連の認証情報を使って認証を行い、その後アクセストークンを取得します。
State parameters
state パラメーターが用意されています。state パラメーターは、クライアントが 認可リクエスト で設定した状態オブジェクトの一部を保持し、それをレスポンスでクライアントが利用できるようにします。state パラメーターを使用する主な目的は、CSRF 攻撃を軽減することです。詳細については、Use OAuth 2.0 State Parameters を参照してください。