Skip to main content

Overview

主要概念
  • Auth0は、Internet Engineering Task Force (IETF) が策定したOAuth 2.0プロトコルをサポートしています。
  • OAuth 2.0仕様の役割、グラントタイプ (またはワークフロー) 、エンドポイントについて説明します。
OAuth 2.0認可フレームワークは、ユーザーが長期的な資格情報やアイデンティティを明かすことなく、サードパーティのウェブサイトやアプリケーションに保護されたリソースへのアクセスを許可できるプロトコルです。 は認可レイヤーを導入し、クライアントの役割を の役割から切り離します。OAuthでは、クライアントはリソース所有者が管理し がホストするリソースへのアクセスを要求し、リソース所有者とは異なる資格情報が発行されます。保護されたリソースへのアクセスにリソース所有者の資格情報を使用する代わりに、クライアントは (特定のスコープ、有効期間、その他のアクセス属性を示す文字列) を取得します。アクセストークンは、リソース所有者の承認のもと、 によってサードパーティのクライアントに発行されます。その後、クライアントはそのアクセストークンを使用して、リソースサーバーがホストする保護されたリソースにアクセスします。 Auth0は、APIの認可シナリオ向けにJSON Web Token (JWT) 形式でアクセストークンを生成します。アクセストークンが表すpermissionsは、OAuthの用語ではスコープと呼ばれます。アプリケーションがAuth0で認証する際に必要なスコープを指定し、ユーザーによってそれらのスコープが認可されると、アクセストークンはその認可済みスコープを表します。

役割

OAuth 2.0のフローには、次の役割があります。
  • リソース所有者: 保護されたリソースへのアクセスを許可できる主体です。通常はエンドユーザーを指します。
  • リソースサーバー: 保護されたリソースをホストするサーバーです。つまり、アクセスしたいAPIのことです。
  • クライアント: リソース所有者に代わって、保護されたリソースへのアクセスを要求するアプリケーションです。
  • 認可サーバー: リソース所有者を認証し、適切な認可を得たうえでアクセストークンを発行するサーバーです。この場合はAuth0です。

グラントタイプ

OAuth 2.0 では、アクセストークン を取得するための 4 つのフローが定義されています。これらのフローは、グラントタイプと呼ばれます。どのフローがユースケースに適しているかを判断する際には、主にアプリケーションの種類を考慮します。 この仕様では、追加のグラントタイプを定義するための拡張メカニズムも提供されています。各グラントタイプの仕組みや使用すべき場面について詳しくは、Authentication and Authorization Flows を参照してください。

エンドポイント

OAuth 2.0 では、/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 を使用して、アクセストークンと の両方を含めることもできます。
ID token は、ログインしているユーザーに関する情報を含む JWT です。これは Connect (OIDC) で導入されました。 OAuth 2.0 Multiple Response Type Encoding Practices specification では、認可リクエストの結果をどのような形式で返すかを指定するパラメータが追加されました。このパラメータは 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 を参照してください。

詳細はこちら