リフレッシュトークンのローテーションを使用する

リフレッシュトークンのローテーションを使用するには、Auth0 Single-Page App SDKが必要です。Auth0 SPA SDKは、トークン保管、セッション管理、その他の詳細を処理します。

前提条件

リフレッシュトークンのローテーションを構成してオフラインアクセスを有効にし、クライアントSDKでオフラインアクセスのスコープを要求します。

useRefreshTokensを有効にする

OAuth2の仕様に従い、ブラウザーが/tokenエンドポイントからリフレッシュトークンを要求した場合、Auth0はそのクライアントに対してリフレッシュトークンローテーションが有効になっている場合にのみ、リフレッシュトークンを返します。

createAuth0ClientuseRefreshTokensを使用します。デフォルトはfalseです。このオプションをfalseに設定すると、getTokenSilently()が呼び出されて新しいアクセストークンが必要になったときに、SDKは非表示のiframeとprompt=noneを使用して新しいアクセストークンを取得しようとします。

このオプションをtrueに設定すると、loginWithRedirect(), loginWithPopup()、およびgetTokenSilently()を使用した際にoffline_accessスコープが自動的に要求されます。getTokenSilently()が呼び出されたときにアクセストークンの有効期限が切れていた場合、SDKはキャッシュからのリフレッシュトークンとrefresh_token付与タイプを一緒に使用して/tokenエンドポイントを呼び出すことにより、IDおよびアクセストークンの更新を試みます。

サイレント再認証は、認証要求があったときにprompt=noneパラメーターを送信し、非表示のiframeを使用することで行うことができます。ただしこれは、認可サーバー上にアクティブなユーザーセッションが存在する場合に限ります。useRefreshTokenstrueに設定されていても、キャッシュ内に使用できるリフレッシュトークンがない場合、SDKはiframeを使用します。こうすることで、ユーザーは再度ログインしなくても、サイレントにリフレッシュトークンを使用するように移行することができます。

useRefreshTokenstrueでもキャッシュにリフレッシュトークンがないために交換が失敗した場合、SDKはiframeの方法にフォールバックします(ただし、サードパーティーのクッキーがブロックされている場合、iframeも失敗することがあります)。

トークンの保管

SPAでは、IDトークンとアクセストークンは認可サーバーから取得され、通常はメモリ内にキャッシュとして保存されます。ブラウザーの更新、メモリキャッシュの退避予算、期限切れなどによるトークンの更新は、SDKによって処理されます。

SDKをローカルストレージとリフレッシュトークンの両方を使用するように構成する方法を以下の例に示します。

const auth0 = await createAuth0Client({
    domain: '<your Auth0 domain>',
    client_id: '<your Auth0 client ID>',
    cacheLocation: 'localstorage',
    useRefreshTokens: true
    });
    
    // Logging-in will automatically request the offline_access scope
    // and store the resulting refresh token
    auth0.loginWithRedirect();
    
    // Silently refreshing the access token will use the /token endpoint
    // with ‘refresh_token’ grant and the refresh token from the cache
    await auth0.getTokenSilently();

Was this helpful?

/

もっと詳しく