メインコンテンツへスキップ
論理的にはすべて同じAPIの一部である複数の異なる API 実装がある場合、Auth0ダッシュボードで単一の論理APIを使用してそれらを表すことで、承認プロセスを簡素化できます。これを行うと、適切なスコープを割り当てることで個々のAPIへのアクセスを制御しながら、1つの承認フローのみを実装できます。 次のセクションでは、Auth0で複数のAPIを単一のリソースサーバーとして使用して表す方法について説明します。例では、次のサンプルアプリケーションを使用します。サンプルアプリケーションはマイクロサービスアーキテクチャを使用し、次のものが含まれています。
  • 2つの Node.js API:contactscalendar(マイクロサービスと考えることができます)
  • 2つのAPIを表す1つのリソースサーバー
  • 2つの名前空間スコープ:read:contactsおよびread:calendar
  • 両方のAPIで機能するaccess_tokenを取得するための暗黙の付与フロー
2つのAPIを、Organizer Serviceという1つのAuth0 APIを使用して表します。次に、暗黙のフローを使用してSPAからcalendarAPIとcontactsAPIにアクセスする方法を示す2つのスコープを作成します。 次のステップを完了する必要があります。
  1. アプリケーションの接続を有効にする
  2. テストユーザーを作成する
  3. Auth0で論理APIを登録する
  4. 論理APIのスコープを構成する
  5. 論理APIへのアクセスを許可する
  6. (オプション)シングルログアウト(SLO)またはシングルサインオン(SSO)を実装する

前提条件

  • アプリケーションを登録します
    • シングルページアプリアプリケーションタイプ を選択します。
    • http://localhost:3000およびhttp://localhost:3000/callback.html許可されたコールバックURL を追加します。
  • サンプルアプリケーションをダウンロードします。サンプルアプリケーションの設定方法については、READMEをお読みください。

アプリケーションの接続を有効にする

新しく登録したアプリケーションにはユーザーのソースが必要なので、接続を構成する必要があります。このサンプルでは、​​ユーザーのメールアドレスとパスワードのみを要求するシンプルなデータベース接続を作成します。詳細については、データベース接続の設定をお読みください。

テストユーザーを作成する

新しく作成した接続を使用しているため、それに関連付けられたユーザーはいません。サンプルアプリケーションのログインプロセスをテストする前に、ユーザーを作成して接続に関連付ける必要があります。ユーザーを作成するときは、新しく作成した接続を選択してください。詳細については、ユーザーの作成をお読みください。

Auth0で論理APIを登録する

サンプルアプリケーション内に含まれる複数のAPIを表すために使用する単一の論理APIを登録します。このサンプルでは、​​APIのOrganizer Serviceを呼び出して、その一意の識別子をorganizeに設定します。デフォルトでは、このAPI用に取得されたトークンの署名アルゴリズムはRS256 ですが、そのままにしておきます。詳細については、「APIを登録する」お読みください。

論理APIの権限を構成する

論理APIがサンプルアプリケーション内に含まれるAPIを表すようにするには、適切な権限(スコープ)を作成する必要があります。 スコープを使用すると、呼び出し元のアプリケーションがアクセスできるAPIアクションを定義できます。1つのスコープは1つのAPI/アクションの組み合わせを表します。このサンプルでは、​​呼び出し元のアプリケーションがcalendarという1つのAPIとcontactsという別のAPIからreadことができるようにする必要があるため、次の権限を作成する必要があります。
  • read:calendar
  • read:contacts
それぞれをマイクロサービスと考えることができます。詳細については、API権限の追加およびAPIスコープをお読みください。

論理APIへのアクセスを許可する

これで、論理APIがアクセストークンを取得できるようにすることで、APIへのアクセスを提供する準備が整いました。必要なスコープを含めることで、論理APIによって表されるAPIへのアプリケーションのアクセスを制御できます。次の手順では、暗黙的なフローを使用してサンプルを反映しています。ただし、ニーズに最適なフローを使用できます。例: 承認フローの詳細については、認可と承認フローをお読みください。
  1. ユーザーがSPA内でログインをクリックすると、アプリはユーザーをAuth0承認サーバー(/authorizeエンドポイント)にリダイレクトします。呼び出しのパラメーターの詳細については、チュートリアルをご覧ください。PKCEを使った認可コードフローで独自のAPIを呼び出し
    https://{yourDomain}/authorize?
    scope=read:contacts%20read:calendar&
    audience=organize&
    response_type=id_token%20token&
    client_id={yourClientId}&
    redirect_uri=http://localhost:3000&
    nonce={nonce}
    
    Example application sign in page
  2. Auth0承認サーバーはユーザーをログインページにリダイレクトし、ユーザーは構成されたログインオプションの1つを使用して認証します。
    Lock login page
  3. ユーザーがこのフローを初めて通過する場合は、Auth0がSPAに付与する権限をリストした同意プロンプトが表示されます。この場合、ユーザーはアプリが連絡先とカレンダーを読み取ることに同意するよう求められます。
    Example application Lock Consent screen
  4. ユーザーが同意すると、Auth0はURIのハッシュフラグメントにトークンを含むSPAにユーザーをリダイレクトします。SPAは、JavaScriptを使用してハッシュフラグメントからトークンを抽出し、ユーザーに代わってAPIを呼び出すことができるようになりました。
    function getParameterByName(name) {
      var match = RegExp('[#&]' + name + '=([^&]*)').exec(window.location.hash);
      return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
    }
    
    function getAccessToken() {
      return getParameterByName('access_token');
    }
    
サンプルでは、​​ログインに成功すると、論理APIから取得したアクセストークンを使用していずれかのAPIを呼び出すためのボタンが表示されます。
Example application user authorized screen

シングルログアウト(SLO)またはシングルサインオン(SSO)を実装する

シングルログアウトが必要な一部のマルチアプリケーションのシナリオ(あるアプリケーションからログアウトするユーザーが他のアプリケーションからもログアウトする必要があるような場合)では、checkSession()を使用して定期的にAuth0をポーリングし、セッションが存在するかどうかを確認するようにアプリケーションを設定できます。セッションがない場合は、ユーザーをアプリケーションからログアウトさせることができます。同じポーリング方式を使用して、シングルサインオン()のシナリオにサイレント認証を実装することができます。 ポーリング間隔として、checkSession()の呼び出し間隔を15分以上に設定し、レート制限の問題が生じないようにします。

もっと詳しく

I