Overview
主要概念
- Auth0は、Internet Engineering Task Force (IETF) が策定したOAuth 2.0プロトコルをサポートしています。
- OAuth 2.0仕様のロール、グラントタイプ (ワークフロー) 、エンドポイントについて確認できます。
役割
- リソースオーナー: 保護されたリソースへのアクセスを許可できる主体です。通常はエンドユーザーを指します。
- リソースサーバー: 保護されたリソースを提供するサーバーです。つまり、アクセス先の API です。
- クライアント: リソースオーナー に代わって、保護されたリソースへのアクセスを要求するアプリケーションです。
- Authorization Server: リソースオーナー を認証し、適切な認可を得た後にアクセストークンを発行する認可サーバーです。この場合は Auth0 を指します。
Grant types
- 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 グラントタイプで使用されます。認可サーバーは、アプリケーションがどのグラントタイプを使うのかを把握する必要があります。これは、発行するクレデンシャルの種類に影響するためです。
- Authorization Code グラントでは、認可コードを発行します (後で
/oauth/tokenエンドポイントでアクセストークンと交換できます) 。 - Implicit グラントでは、アクセストークンを発行します。これは不透明な文字列 (または Auth0 実装では ) で、どのアプリケーションに対して誰がどの権限 (スコープ) を認可したかを表します。
response_type リクエストパラメーターを次のように使用します。
- Authorization Code グラントでは、認可コードを含めるために
response_type=codeを使用します。 - Implicit グラントでは、アクセストークンを含めるために
response_type=tokenを使用します。別の方法として、アクセストークンと の両方を含めるためにresponse_type=id_token tokenを使用できます。
response_mode と呼ばれます。省略可能で、次の値を取ります:
トークンエンドポイント
/oauth/token エンドポイントは、アプリケーションがアクセストークンまたはを取得するために使用されます。Implicit Flow を除くすべてのフローで使用されます。Implicit Flow では、アクセストークンが直接発行されます。
- Authorization Code Flow では、アプリケーションは認可エンドポイントから取得した認可コードをアクセストークンと交換します。
- Client Credentials Flow と Resource Owner Password Credentials Grant Exchange では、アプリケーションは一連の認証情報を使用して認証を行い、その後アクセストークンを取得します。
state パラメーター
state パラメーターが提供されています。state パラメーターは、認可リクエストでクライアントが設定した状態オブジェクトを保持し、その値をレスポンスでクライアントが利用できるようにします。state パラメーターを使用する主な目的は、CSRF 攻撃を軽減することです。詳細については、OAuth 2.0 の state パラメーターを使用するを参照してください。