Skip to main content
Auth0 では、アプリケーションの API アクセスポリシー とクライアントグラントを使用して、アプリケーションが API にアクセスする方法を制御できます。 クライアントグラントを使用すると、アプリケーションの API へのアクセスをきめ細かく制御できます。これにより、次の項目が関連付けられます。
  • audience または一意の識別子で識別される API
  • client_id で識別されるアプリケーション
  • 指定された audience に対してアプリケーションがリクエストできる、スコープや authorization_details_types などの権限の一覧
クライアントグラントで定義できる属性の一覧について詳しくは、クライアントグラントの属性 を参照してください。クライアントグラントの定義と管理の方法については、クライアントグラントを作成する を参照してください。

アプリケーションのAPIアクセスポリシーとクライアントグラント

APIのアプリケーションアクセスポリシーrequire_client_grantに設定すると、クライアントグラントが定義されているアプリケーションのみが、そのAPIのアクセストークンを取得できます。クライアントグラントは、最小権限の原則に基づき、アプリケーションがそのAPIに対して要求できる最大の権限を定めます。そのため、Auth0では、APIのアプリケーションアクセスポリシーを設定する際にrequire_client_grantを使用することを推奨しています。

例: Social Media API

クライアントグラントが最小権限の原則にどのように従うかを示す例として、read:postswrite:postsread:friendsdelete:posts という権限を持つ Social Media API があるとします。そこで、アプリケーションを作成し、read:postswrite:posts の権限を持つクライアントグラントを定義します。 このクライアントグラントは、厳格な上限として機能します。Social Media API にほかの権限があっても、アプリケーションが read:friendsdelete:posts をリクエストしたり、それらの権限を付与されたりすることはありません。

ユーザー委譲アクセスとクライアントアクセスの違い

ユーザー委譲アクセスとクライアントアクセスでは、クライアントグラントが、アプリケーションの API へのアクセスを制御する最終的な権限セットを定義します。クライアントグラントの subject_type 属性によって、API に対して許可されるアプリケーションアクセスの種類が決まります。 1 つの API に対して、1 つのアプリケーションに最大 2 つのクライアントグラントを設定できます。
  • subject_typeclient に設定すると、マシンツーマシンの権限を定義します。
  • subject_typeuser に設定すると、ユーザーに代わって動作するための権限を定義します。
次の表は、アクセスフローの種類に応じて、クライアントグラントが API へのアプリケーションアクセスをどのように制御するかを説明しています。
Actions を使用すると、認可サーバーがアプリケーションまたはユーザーに付与する最終的なスコープを変更できます。

クライアントグラントの属性

クライアントグラントには、Auth0 Management API を使用してアプリケーションの API へのアクセスを設定するために定義できる属性がいくつかあります。

クライアントグラントを作成する

次のものを作成できます。 同じ API に対して両方が存在する場合は、アプリケーションごとの権限がサードパーティアプリケーションのデフォルト権限よりも優先されます。

アプリケーションごとの権限

Auth0 Dashboard を使用してアプリケーションごとの権限を設定するには、次の手順に従います。
  1. Auth0 Dashboard > アプリケーション > APIs に移動し、アプリケーションアクセスを設定する API を選択します。
  2. 設定 タブを開き、Application Access Policy までスクロールします。
    • User-Delegated AccessNo apps allowedPer-app authorization、または All apps allowed に設定します。
      • No apps allowed: どのアプリケーションも API のアクセストークンを取得できません。
      • Per-app authorization: クライアントグラントが定義されているアプリケーションのみ、その API のアクセストークンを取得できます。
      • All apps allowed: テナント内の任意のアプリケーションが、その API のアクセストークンを取得できます。
    • Client AccessPer-app authorization または All apps allowed に設定します。
      • Per-app authorization: クライアントグラントが定義されているアプリケーションのみ、その API のアクセストークンを取得できます。
      • All apps allowed: テナント内の任意のアプリケーションが、その API のアクセストークンを取得できます。
  3. Application Access Policy の設定を保存するには、Save を選択します。
Application Access Policy の Auth0 Dashboard API 設定
アプリケーションごとの権限では、各アプリケーションに対して API アクセスを個別に許可する必要があります。
  1. アプリケーション > APIs に移動し、API を選択します。
  2. Application Access タブを開きます。
  3. 対象のアプリケーションまでスクロールし、Edit を選択してから、User-Delegated Access および/または Client AccessGrant Access を選択します。次に、必要な権限を選択します。
  4. Save を選択します。
アプリケーションへの API アクセス付与の Auth0 Dashboard API 設定

サードパーティアプリケーションのデフォルト権限

サードパーティアプリケーションが API にアクセスするには、API のアクセスポリシーAllow All に設定されている場合でも、常に明示的なクライアントグラントが必要です。サードパーティアプリケーションが多数ある場合や、Dynamic Client Registrationを使用している場合の管理を簡単にするために、すべてのサードパーティアプリケーションに自動的に適用されるデフォルトのグラントまたは権限を設定できます。 デフォルトのサードパーティクライアントグラントでは、client_id の代わりに default_for 属性を使用します。特定の client_id を指定したクライアントグラントを作成して、アプリケーションごとの権限を定義することもできます。同じ API に対して両方が存在する場合は、アプリケーションごとの権限が優先されます。
システム API (Management API、My Account API など) は、デフォルトのサードパーティクライアントグラントをサポートしていません。サードパーティアプリケーションにシステム API へのアクセスを付与することはできません。
default_for 属性と client_id 属性は相互排他的です。各クライアントグラントでは、このいずれか一方のみを指定する必要があります。 サードパーティアプリケーション向けの API アクセスポリシーの設定方法については、Configure Third-Party Applicationsを参照してください。
Auth0 Dashboard を使用してサードパーティアプリケーションのデフォルト権限を設定するには、次の手順に従います。
  1. Auth0 Dashboard > アプリケーション > APIs に移動し、アプリケーションアクセスを設定する API を選択します。
  2. 設定 タブに移動し、サードパーティアプリケーションのデフォルト権限 までスクロールします。
    • User-Delegated Access および/または Client AccessUnauthorizedAuthorized、または All に設定します。
      • Unauthorized: 権限は許可されません。
      • Authorized: 権限を個別に選択します。
      • All: 現在ある権限と今後追加される権限がすべて含まれます。
  3. Save を選択します。
サードパーティアプリ向けデフォルト権限を含む Auth0 Dashboard API Settings

クライアントグラントを更新する

既存のクライアントグラントを更新するには、/client-grants/{id}PATCH リクエストを送信します。

クライアントグラントを削除する

クライアントグラントを削除するには、/client-grants/{id}DELETE リクエストを送信します。

クライアントグラントを取得する

client_idaudiencesubject_type などのパラメータを使用して、client-grants コレクションを検索したり、ページ単位で取得したりすることもできます。

詳細はこちら