インストール
プロジェクトで Auth0 SPA SDK を使用するには、いくつかの方法があります。- CDN を使用する:
<script src="https://cdn.auth0.com/js/auth0-spa-js/2.0/auth0-spa-js.production.js"></script>。詳細については、FAQを参照してください。 - npm を使用する:
npm install @auth0/auth0-spa-js - yarn を使用する:
yarn add @auth0/auth0-spa-js
はじめに
クライアントを作成する
まず、新しいAuth0Client クライアントオブジェクトのインスタンスを作成する必要があります。アプリケーションをレンダリングまたは初期化する前に、Auth0Client インスタンスを作成してください。これには、async/await を使用する方法と、Promise を使用する方法があります。クライアントのインスタンスは 1 つだけ作成するようにしてください。
createAuth0Client を使用すると、次の処理が自動的に行われます。
Auth0Clientのインスタンスを作成します。getTokenSilentlyを呼び出して、ユーザーのセッションを更新します。getTokenSilentlyで発生するすべてのエラーを抑制します。ただし、login_requiredは除きます。
async/await を使う
Promise を使う
Auth0Client コンストラクターを使用して、クライアントを直接作成することもできます。これは、次のような場合に便利です。
- 初期化時の
getTokenSilentlyの呼び出しを回避したい。 - 独自のエラー処理を行いたい。
- SDK を同期的に初期化したい。
ログインしてユーザー情報を取得する
次に、ユーザーがクリックしてログインを開始できるボタンを作成します。<button id="login">Click to Login</button>
作成したボタンのクリックイベントを待ち受けます。イベントが発生したら、使用するログイン方法でユーザーを認証します (この例では loginWithRedirect() を使用します) 。ユーザーの認証後、getUser() メソッドでユーザープロファイルを取得できます。
async/await を使う
Promise を使う
API を呼び出す
API を呼び出すには、まずユーザーの を取得します。次に、そのアクセストークンをリクエストで使用します。この例では、アクセストークンの取得にgetTokenSilently メソッドを使用しています。
<button id="callApi">Call an API</button>
async/await を使う
Promise を使う
ログアウト
ユーザーがクリックしてログアウトできるボタンを追加します:<button id="logout">Logout</button>
ストレージオプションを変更する
Auth0 SPA SDK は、デフォルトでトークンをメモリに保存します。ただし、この方法ではページを再読み込みしたり、ブラウザーの別タブを開いたりすると保持されません。代わりに、SDK の初期化時にcacheLocation プロパティを localstorage に設定することで、トークンをローカルストレージに保存するよう明示的に有効化できます。これにより、アクセストークンをより長く保持できるため、Auth0 の へのアクセスを制限するブラウザーのプライバシー保護機能による影響を、一部軽減できます。
ローテーションするリフレッシュトークンを使用する
Auth0 SPA SDK は、ローテーションするリフレッシュトークンを使用して、新しいアクセストークンをサイレントに取得するよう設定できます。これにより、サイレント認証時に Auth0 セッションクッキー へのアクセスを妨げるブラウザーのプライバシー保護機能を回避できるほか、組み込みの再利用検知も利用できます。 これを行うには、初期化時にuseRefreshTokens を true に設定します:
を SPA で使用するには、事前にテナントで設定しておく必要があります。
設定が完了すると、SDK は認可ステップで offline_access スコープを要求します。さらに、getTokenSilently は /oauth/token エンドポイントを直接呼び出し、リフレッシュトークンをアクセストークンに交換します。
SDK は、リフレッシュトークンの保存時にストレージ設定に従います。SDK がデフォルトのインメモリストレージを使用するよう設定されている場合、ページを更新するとリフレッシュトークンは失われます。
使い方
以下に、SDK の各種メソッドの使用例を示します。なお、これらの例では jQuery を使用しています。リダイレクトでログイン
Auth0 の/authorize エンドポイントへリダイレクトして、Universal Login フローを開始します。
ポップアップでログイン
ポップアップウィンドウを使用して、 ページからログインします:error.popup.close を使ってポップアップを手動で閉じるよう案内します。
options オブジェクトでカスタムの popup オプションを定義します。
リダイレクトのコールバックによるログイン
ブラウザーが Auth0 から SPA にリダイレクトされて戻ったら、ログインフローを完了するためにhandleRedirectCallback を呼び出す必要があります。
操作なしでアクセストークンを取得する
非表示の iframe とprompt=none を使用するか、ローテーションされるリフレッシュトークンを使用して、新しいアクセストークンをサイレントに取得します。リフレッシュトークンは、SDK の設定時に useRefreshTokens を true に設定した場合に使用されます。
リフレッシュトークンを使用せずにアクセストークンをサイレントに取得することは、Safari や Brave など、サードパーティ Cookie をブロックするブラウザーでは機能しません。カスタムドメインを使った回避策の詳細については、Safari 使用時のトークン更新のトラブルシューティングを参照してください。
getTokenSilently() メソッドを使用するには、Auth0 Dashboard の API 設定で Allow Skipping User Consent を有効にしておく必要があります。さらに、‘localhost’ ではユーザーの同意を省略できません。
ポップアップでアクセストークンを取得する
アクセストークンは、ポップアップを使って取得することもできます。getTokenSilently とは異なり、この方法であれば、サードパーティ Cookie がデフォルトでブロックされているブラウザーでもアクセストークンを取得できます。
別の audience 向けのアクセストークンを取得する
getTokenSilently にオプションを渡すと、ユーザーの認証時にリクエストしたものとは異なる と scope を持つアクセストークンを取得できます。
これは、リフレッシュトークンを使用していない場合 (
useRefreshTokens: false) にのみ機能します。リフレッシュトークンは、ユーザーの認証時にリクエストした特定の audience と scope に紐づいているためです。ユーザー情報の取得
getUser メソッドを呼び出すと、認証済みユーザーのプロファイルデータを取得できます。
ID トークンのクレームを取得する
getIdTokenClaims メソッドを呼び出すと、認証済みユーザーののクレームを取得できます。
ログアウト (デフォルト)
logout メソッドを呼び出すことで、ログアウトを開始できます。
Client ID を指定しないログアウト
logout メソッドを呼び出して clientId: null を指定すると、 を指定せずにログアウトアクションを開始できます。