複数のAPIの論理APIを構成する

論理的にはすべて同じ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 からカレンダーAPIと連絡先APIにアクセスする方法を示す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アクションを定義できます。1つのスコープは1つのAPI/アクションの組み合わせを表します。このサンプルでは、​​呼び出し元のアプリケーションがカレンダーという1つのAPIと連絡先という別のAPIから読み取ることができるようにする必要があるため、次の権限を作成する必要があります。

  • read:calendar

  • read:contacts

それぞれをマイクロサービスと考えることができます。詳細については、API権限の追加およびAPIスコープをお読みください。

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

これで、論理APIがアクセストークンを取得できるようにすることで、APIへのアクセスを提供する準備が整いました。必要なスコープを含めることで、論理APIによって表されるAPIへのアプリケーションのアクセスを制御できます。次の手順では、暗黙的なフローを使用してサンプルを反映しています。ただし、ニーズに最適なフローを使用できます。例:

承認フローの詳細については、認可と承認フローをお読みください。

  1. ユーザーがSPA内でログインをクリックすると、アプリはユーザーをAuth0承認サーバー(/authorizeエンドポイント)にリダイレクトします。呼び出しのパラメーターの詳細については、チュートリアルをご覧ください。PKCEを使った認可コードフローで独自のAPIを呼び出し

    codeblockOld.header.login.configureSnippet
    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}

    Was this helpful?

    /

    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');
    }

    Was this helpful?

    /

サンプルでは、​​ログインに成功すると、論理 API から取得したアクセストークンを使用していずれかのAPIを呼び出すためのボタンが表示されます。

Example application user authorized screen

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

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

ポーリング間隔として、checkSession()の呼び出し間隔を15分以上に設定し、レート制限の問題が生じないようにします。

もっと詳しく