- 2 つの Node.js API:
contactsとcalendar(マイクロサービスと考えることができます) - 2 つの API を表す 1 つのリソースサーバー
- 2 つの名前空間付きスコープ:
read:contactsとread:calendar - 両方の API で使える
access_tokenを取得するための Implicit Grantフロー
Organizer Service という 1 つの Auth0 API で表現します。次に 2 つのスコープを作成し、SPA から calendar API と contacts API にアクセスするために Implicit Flow をどのように使用できるかを示します。
次の手順を完了してください。
- アプリケーションの接続を有効にする
- テストユーザーを作成する
- Auth0 に論理 API を登録する
- 論理 API のスコープを設定する
- 論理 API へのアクセスを許可する
- (任意) シングルログアウト (SLO) またはシングルサインオン (SSO) を実装する
前提条件
-
アプリケーションを登録します。
- Application Type で Single-Page App を選択します。
- Allowed Callback URLs に
http://localhost:3000とhttp://localhost:3000/callback.htmlを追加します。
- サンプルアプリケーションをダウンロードします。サンプルアプリのセットアップ方法については、READMEを参照してください。
アプリケーションで接続を有効にする
テスト用ユーザーを作成する
Auth0 に論理 API を登録する
Organizer Service とし、一意の識別子を organize に設定します。デフォルトでは、この API 用に取得したトークンの は RS256 です。この設定は変更しないでください。詳しくは、API を登録する を参照してください。
論理 API の権限を設定する
calendar と contacts という 2 つの API を read できるようにするため、次の権限を作成する必要があります。
read:calendarread:contacts
論理 API へのアクセスを許可する
- マシン間アプリケーションがある場合は、Client Credentials フロー を実行することで、そのアプリケーションが API のアクセストークンをリクエストできるように認可できます。
- ネイティブアプリを構築している場合は、PKCE を使用する認可コードフロー を実装できます。
-
ユーザーが SPA 内で Login をクリックすると、アプリケーションはユーザーを Auth0 認可サーバー (
/authorizeエンドポイント) にリダイレクトします。この呼び出しのパラメーターについて詳しくは、チュートリアル「Call Your API Using the Authorization Code Flow with PKCE」を参照してください。
-
Auth0 認可サーバーはユーザーをログインページにリダイレクトし、ユーザーはそこで設定済みのログインオプションのいずれかを使用して認証します。

-
ユーザーがこのフローを利用するのが初めての場合、Auth0 が SPA に付与する権限の一覧を表示する同意プロンプトが表示されます。この場合、ユーザーはアプリケーションが自分の連絡先とカレンダーを読み取ることに同意するよう求められます。

-
ユーザーが同意すると、Auth0 は URI のハッシュフラグメントにトークンを含めてユーザーを SPA にリダイレクトします。これで SPA は JavaScript を使用してハッシュフラグメントからトークンを抽出し、アクセストークンを使用してユーザーに代わって API を呼び出せます。
このサンプルでは、ログインに成功すると、論理 API から取得したアクセストークンを使用して、いずれかの API を呼び出せるボタンが表示されます。

シングルログアウト (SLO) またはシングルサインオン (SSO) を実装する
checkSession() を使用して Auth0 を定期的にポーリングし、セッションが存在するかどうかを確認するようにアプリケーションを設定できます。セッションが存在しない場合は、そのユーザーをアプリケーションからログアウトできます。同じポーリング方法は、 (SSO) のシナリオでサイレント認証を実装する場合にも使用できます。
将来的にこの呼び出しのレート制限に関する問題を避けるため、checkSession() の確認間隔は、呼び出し間で少なくとも 15 分空けてください。