Keycloak JavaScriptアダプター

ウェブアプリケーションをセキュア化するために使用できるクライアントサイドのJavaScriptライブラリ。

Keycloakには、ウェブアプリケーションをセキュア化するために使用できるkeycloak-jsというクライアントサイドのJavaScriptライブラリが付属しています。このアダプターには、Cordovaアプリケーションの組み込みサポートも付属しています。このアダプターは、内部的にはOpenID Connectプロトコルを使用しています。OpenID Connectのエンドポイントと機能に関するより一般的な情報については、OpenID Connectによるアプリケーションとサービスのセキュア化ガイドを参照してください。

インストール

keycloak-jsパッケージをNPMからインストールすることをお勧めします。

npm install keycloak-js

Keycloakサーバーの設定

クライアントサイドアプリケーションの使用に関して考慮すべき重要な点の1つは、クライアントサイドアプリケーションにクライアントクレデンシャルを安全に保存する方法がないため、クライアントはパブリッククライアントである必要があるということです。この考慮事項により、クライアントに設定したリダイレクトURIが正しく、可能な限り具体的であることを確認することが非常に重要になります。

アダプターを使用するには、Keycloak管理コンソールでアプリケーションのクライアントを作成します。Capability configページのクライアント認証オフに切り替えて、クライアントをパブリックにします。

有効なリダイレクトURIウェブオリジンも設定する必要があります。具体的に設定するようにしてください。そうしないと、セキュリティ脆弱性につながる可能性があります。

アダプターの使用

次の例は、アダプターを初期化する方法を示しています。Keycloakコンストラクターに渡すオプションを、設定したクライアントのオプションに置き換えてください。

import Keycloak from 'keycloak-js';

const keycloak = new Keycloak({
    url: "http://keycloak-server",
    realm: "my-realm",
    clientId: "my-app"
});

try {
    const authenticated = await keycloak.init();
    if (authenticated) {
        console.log('User is authenticated');
    } else {
        console.log('User is not authenticated');
    }
} catch (error) {
    console.error('Failed to initialize adapter:', error);
}

認証するには、login関数を呼び出します。アダプターを自動的に認証するには、2つのオプションがあります。init()関数にlogin-requiredまたはcheck-ssoを渡すことができます。

  • login-requiredは、ユーザーがKeycloakにログインしている場合はクライアントを認証し、ユーザーがログインしていない場合はログインページを表示します。

  • check-ssoは、ユーザーがすでにログインしている場合にのみクライアントを認証します。ユーザーがログインしていない場合、ブラウザーはアプリケーションにリダイレクトバックされ、認証されないままになります。

サイレントcheck-ssoオプションを設定できます。この機能を有効にすると、ブラウザーはKeycloakサーバーへの完全なリダイレクトとアプリケーションへのリダイレクトバックを実行しませんが、このアクションは非表示のiframeで実行されます。したがって、アプリケーションリソースはブラウザーによって1回だけロードおよび解析されます。つまり、アプリケーションが初期化されたときであり、Keycloakからアプリケーションへのリダイレクトバック後ではありません。このアプローチは、SPA(シングルページアプリケーション)の場合に特に役立ちます。

サイレントcheck-ssoを有効にするには、initメソッドでsilentCheckSsoRedirectUri属性を指定します。このURIがアプリケーション内の有効なエンドポイントであることを確認してください。Keycloak管理コンソールでクライアントの有効なリダイレクトとして設定する必要があります。

await keycloak.init({
    onLoad: 'check-sso',
    silentCheckSsoRedirectUri: `${location.origin}/silent-check-sso.html`
});

サイレントチェックSSOリダイレクトURIのページは、認証状態を正常にチェックし、Keycloakサーバーからトークンを取得した後、iframeにロードされます。これは、受信したトークンをメインアプリケーションに送信する以外のタスクはなく、次のようになります。

<!doctype html>
<html>
<body>
    <script>
        parent.postMessage(location.href, location.origin);
    </script>
</body>
</html>

このページは、silentCheckSsoRedirectUriで指定された場所でアプリケーションによって提供される必要があり、アダプターの一部ではないことに注意してください。

サイレントcheck-sso機能は、一部の最新のブラウザーでは制限されています。「トラッキング保護付きの最新ブラウザー」セクションを参照してください。

login-requiredを有効にするには、onLoadlogin-requiredに設定し、initメソッドに渡します。

await keycloak.init({
    onLoad: 'login-required'
});

ユーザーが認証されると、アプリケーションはAuthorizationヘッダーにベアラートークンを含めることで、Keycloakによって保護されたRESTfulサービスにリクエストを行うことができます。例:

async function fetchUsers() {
    const response = await fetch('/api/users', {
        headers: {
            accept: 'application/json',
            authorization: `Bearer ${keycloak.token}`
        }
    });

    return response.json();
}

注意すべきことの1つは、アクセストークンの有効期限がデフォルトで短いため、リクエストを送信する前にアクセストークンを更新する必要がある場合があることです。このトークンを更新するには、updateToken()メソッドを呼び出します。このメソッドはPromiseを返し、トークンが正常に更新された場合にのみサービスを呼び出し、更新されなかった場合にユーザーにエラーを表示することが容易になります。例:

try {
    await keycloak.updateToken(30);
} catch (error) {
    console.error('Failed to refresh token:', error);
}

const users = await fetchUsers();

アクセスおよびリフレッシュトークンは両方ともメモリに保存され、いかなる種類のストレージにも永続化されません。したがって、ハイジャック攻撃を防ぐために、これらのトークンを永続化すべきではありません。

セッションステータスiframe

デフォルトでは、アダプターは、シングルサインアウトが発生したかどうかを検出するために使用される非表示のiframeを作成します。このiframeは、ネットワークトラフィックを必要としません。代わりに、ステータスは特別なステータスクッキーを調べることによって取得されます。この機能は、init()メソッドに渡されるオプションでcheckLoginIframe: falseを設定することで無効にできます。

このクッキーを直接調べることに依存すべきではありません。その形式は変更される可能性があり、アプリケーションではなくKeycloakサーバーのURLに関連付けられています。

セッションステータスiframe機能は、一部の最新のブラウザーでは制限されています。「トラッキング保護付きの最新ブラウザー」セクションを参照してください。

暗黙的フローとハイブリッドフロー

デフォルトでは、アダプターは認可コードフローを使用します。

このフローでは、Keycloakサーバーは認証トークンではなく、認可コードをアプリケーションに返します。JavaScriptアダプターは、ブラウザーがアプリケーションにリダイレクトバックされた後、codeをアクセストークンとリフレッシュトークンと交換します。

Keycloakは、Keycloakでの認証が成功するとすぐにアクセストークンが送信される暗黙的フローもサポートしています。このフローは、トークンとコードを交換するための追加のリクエストが存在しないため、標準フローよりもパフォーマンスが優れている可能性がありますが、アクセストークンの有効期限が切れると影響があります。

ただし、URLフラグメントでアクセストークンを送信すると、セキュリティ脆弱性になる可能性があります。たとえば、トークンはウェブサーバーのログやブラウザーの履歴を通じてリークされる可能性があります。

暗黙的フローを有効にするには、Keycloak管理コンソールでクライアントの暗黙的フローを有効にするフラグを有効にします。また、initメソッドに値implicitを持つパラメーターflowを渡します。

await keycloak.init({
    flow: 'implicit'
})

アクセストークンのみが提供され、リフレッシュトークンは存在しないことに注意してください。この状況は、アクセストークンの有効期限が切れると、アプリケーションが新しいアクセストークンを取得するために再度Keycloakにリダイレクトする必要があることを意味します。

Keycloakは、ハイブリッドフローもサポートしています。

このフローでは、クライアントが管理コンソールで標準フロー暗黙的フローの両方を有効にする必要があります。Keycloakサーバーは、コードとトークンの両方をアプリケーションに送信します。アクセストークンはすぐに使用でき、コードはアクセスおよびリフレッシュトークンと交換できます。暗黙的フローと同様に、ハイブリッドフローはアクセストークンがすぐに利用可能になるため、パフォーマンスに優れています。ただし、トークンは依然としてURLで送信され、前述のセキュリティ脆弱性が依然として適用される可能性があります。

ハイブリッドフローの利点の1つは、リフレッシュトークンがアプリケーションで利用可能になることです。

ハイブリッドフローの場合、initメソッドに値hybridを持つパラメーターflowを渡す必要があります。

await keycloak.init({
    flow: 'hybrid'
});

Cordovaを使用したハイブリッドアプリ

Keycloakは、Apache Cordovaで開発されたハイブリッドモバイルアプリをサポートしています。アダプターには、これに対する2つのモードcordovacordova-nativeがあります。

デフォルトはcordovaです。これは、アダプタータイプが明示的に設定されておらず、window.cordovaが存在する場合にアダプターが自動的に選択します。ログイン時に、InApp Browserを開き、ユーザーがKeycloakと対話できるようにし、その後、https://127.0.0.1にリダイレクトしてアプリに戻ります。この動作のため、管理コンソールのクライアント構成セクションでこのURLを有効なリダイレクトURIとしてホワイトリストに登録します。

このモードはセットアップが簡単ですが、いくつかの欠点もあります。

  • InApp-Browserは、アプリに埋め込まれたブラウザーであり、電話のデフォルトブラウザーではありません。したがって、設定が異なり、保存されたクレデンシャルは利用できません。

  • InApp-Browserは、特に複雑なテーマをレンダリングする場合、遅くなる可能性もあります。

  • このモードを使用する前に考慮すべきセキュリティ上の懸念事項があります。たとえば、アプリはログインページをレンダリングするブラウザーを完全に制御できるため、ユーザーのクレデンシャルにアクセスできる可能性があります。そのため、信頼できないアプリでの使用は許可しないでください。

代替モードはcordova-nativeで、異なるアプローチを取ります。システムのブラウザーを使用してログインページを開きます。ユーザーが認証されると、ブラウザーは特別なURLを使用してアプリケーションにリダイレクトバックします。そこから、KeycloakアダプターはURLからコードまたはトークンを読み取ることによってログインを完了できます。

アダプタータイプcordova-nativeinit()メソッドに渡すことで、ネイティブモードをアクティブ化できます。

await keycloak.init({
    adapter: 'cordova-native'
});

このアダプターには、2つの追加プラグインが必要です。

  • cordova-plugin-browsertab:アプリがシステムのブラウザーでウェブページを開くことを許可します。

  • cordova-plugin-deeplinks:ブラウザーが特別なURLでアプリにリダイレクトバックできるようにします。

アプリへのリンクに関する技術的な詳細はプラットフォームごとに異なり、特別なセットアップが必要です。詳細な手順については、deeplinksプラグインのドキュメントのAndroidおよびiOSセクションを参照してください。

アプリを開くために、さまざまな種類のリンクが存在します。

前者はセットアップが簡単で、より確実に動作する傾向がありますが、後者は一意であり、ドメインの所有者のみが登録できるため、セキュリティが向上します。カスタムURLはiOSで非推奨になりました。最高の信頼性を得るには、カスタムURLリンクを使用するフォールバックサイトと組み合わせたユニバーサルリンクを使用することをお勧めします。

さらに、アダプターとの互換性を向上させるために、次の手順をお勧めします。

  • iOSのユニバーサルリンクは、response-modequeryに設定すると、より確実に動作するようです。

  • Androidがリダイレクト時にアプリの新しいインスタンスを開くのを防ぐには、次のスニペットをconfig.xmlに追加します。

<preference name="AndroidLaunchMode" value="singleTask" />

カスタムアダプター

状況によっては、Capacitorなど、デフォルトでサポートされていない環境でアダプターを実行する必要がある場合があります。これらの環境でJavasScriptクライアントを使用するには、カスタムアダプターを渡すことができます。たとえば、サードパーティライブラリは、アダプターを確実に実行できるようにするために、そのようなアダプターを提供できます。

import Keycloak from 'keycloak-js';
import KeycloakCapacitorAdapter from 'keycloak-capacitor-adapter';

const keycloak = new Keycloak({
    url: "http://keycloak-server",
    realm: "my-realm",
    clientId: "my-app"
});

await keycloak.init({
    adapter: KeycloakCapacitorAdapter,
});

この特定のパッケージは存在しませんが、そのようなアダプターをクライアントに渡す方法の良い例を示しています。

独自のアダプターを作成することも可能です。そのためには、KeycloakAdapterインターフェースで説明されているメソッドを実装する必要があります。たとえば、次のTypeScriptコードは、すべてのメソッドが適切に実装されていることを保証します。

import Keycloak, { KeycloakAdapter } from 'keycloak-js';

// Implement the 'KeycloakAdapter' interface so that all required methods are guaranteed to be present.
const MyCustomAdapter: KeycloakAdapter = {
    async login(options) {
        // Write your own implementation here.
    }

    // The other methods go here...
};

const keycloak = new Keycloak({
    url: "http://keycloak-server",
    realm: "my-realm",
    clientId: "my-app"
});

await keycloak.init({
    adapter: MyCustomAdapter,
});

当然ながら、型情報を省略することでTypeScriptなしでこれを行うこともできますが、インターフェースを適切に実装することを保証することは、完全にあなた次第になります。

トラッキング保護付きの最新ブラウザー

一部のブラウザーの最新バージョンでは、ChromeのSameSiteや完全にブロックされたサードパーティCookieなど、サードパーティによるユーザーのトラッキングを防ぐために、さまざまなCookieポリシーが適用されています。これらのポリシーは、時間の経過とともにますます制限が厳しくなり、他のブラウザーにも採用される可能性があります。最終的には、サードパーティコンテキストのCookieは完全にサポートされなくなり、ブラウザーによってブロックされる可能性があります。その結果、影響を受けるアダプター機能は最終的に非推奨になる可能性があります。

アダプターは、セッションステータスiframe、サイレントcheck-sso、および部分的には通常の(非サイレント)check-ssoにサードパーティCookieを利用しています。これらの機能は、ブラウザーがCookieに関してどの程度制限的であるかに基づいて、機能が制限されているか、完全に無効になっています。アダプターは、この設定を検出し、それに応じて対応しようとします。

「SameSite=Lax by Default」ポリシーのブラウザー

Keycloak側とアプリケーション側の両方でSSL / TLS接続が設定されている場合、すべての機能がサポートされます。たとえば、Chromeはバージョン84以降で影響を受けます。

サードパーティCookieをブロックするブラウザー

セッションステータスiframeはサポートされておらず、アダプターによってそのようなブラウザーの動作が検出された場合、自動的に無効になります。これは、アダプターがシングルサインアウト検出にセッションCookieを使用できず、トークンのみに依存する必要があることを意味します。その結果、ユーザーが別のウィンドウでログアウトすると、アダプターを使用しているアプリケーションは、アプリケーションがアクセストークンを更新しようとするまでログアウトされません。したがって、ログアウトが可能な限り早く検出されるように、アクセストークンのライフスパンを比較的短い時間に設定することを検討してください。詳細については、「セッションおよびトークンのタイムアウト」を参照してください。

サイレントcheck-ssoはサポートされておらず、デフォルトで通常の(非サイレント)check-ssoにフォールバックします。この動作は、initメソッドに渡されるオプションでsilentCheckSsoFallback: falseを設定することで変更できます。この場合、制限の厳しいブラウザーの動作が検出された場合、check-ssoは完全に無効になります。

通常のcheck-ssoも影響を受けます。セッションステータスiframeがサポートされていないため、アダプターが初期化されたときにユーザーのログインステータスを確認するために、Keycloakへの追加のリダイレクトを行う必要があります。このチェックは、iframeを使用してユーザーがログインしているかどうかを判断する場合の標準的な動作とは異なり、リダイレクトはユーザーがログアウトしている場合にのみ実行されます。

影響を受けるブラウザーは、たとえばバージョン13.1以降のSafariです。

APIリファレンス

コンストラクター

// Recommended way to initialize the adapter.
new Keycloak({
    url: "http://keycloak-server",
    realm: "my-realm",
    clientId: "my-app"
});

// Alternatively a string to the path of the `keycloak.json` file.
// Has some performance implications, as it will load the keycloak.json file from the server.
// This version might also change in the future and is therefore not recommended.
new Keycloak("http://keycloak-server/keycloak.json");

プロパティ

authenticated

ユーザーが認証されている場合はtrue、それ以外の場合はfalse

token

サービスへのリクエストのAuthorizationヘッダーで送信できるbase64エンコードされたトークン。

tokenParsed

JavaScriptオブジェクトとして解析されたトークン。

subject

ユーザーID。

idToken

base64エンコードされたIDトークン。

idTokenParsed

JavaScriptオブジェクトとして解析されたIDトークン。

realmAccess

トークンに関連付けられたレルムロール。

resourceAccess

トークンに関連付けられたリソースロール。

refreshToken

新しいトークンを取得するために使用できるbase64エンコードされたリフレッシュトークン。

refreshTokenParsed

JavaScriptオブジェクトとして解析されたリフレッシュトークン。

timeSkew

ブラウザー時間とKeycloakサーバー間の推定時間差(秒単位)。この値は単なる推定値ですが、トークンが期限切れかどうかを判断するのに十分な精度です。

responseMode

initで渡されたレスポンスモード(デフォルト値はfragment)。

flow

initで渡されたフロー。

adapter

リダイレクトやその他のブラウザー関連の関数がライブラリによって処理される方法をオーバーライドできます。利用可能なオプション

  • "default" - ライブラリはリダイレクトにブラウザーAPIを使用します(これがデフォルトです)

  • "cordova" - ライブラリはInAppBrowser cordovaプラグインを使用してKeycloakのログイン/登録ページをロードしようとします(これはライブラリがcordovaエコシステムで動作している場合に自動的に使用されます)

  • "cordova-native" - ライブラリはBrowserTabs cordovaプラグインを使用して電話システムのブラウザーを使用してログインおよび登録ページを開こうとします。これには、アプリへのリダイレクトバックのための追加設定が必要です(「Cordovaを使用したハイブリッドアプリ」を参照)。

  • "custom" - カスタムアダプターを実装できます(高度なユースケースのみ)

responseType

ログインリクエストとともにKeycloakに送信されるレスポンスタイプ。これは、初期化中に使用されるフロー値に基づいて決定されますが、この値を設定することでオーバーライドできます。

メソッド

init(options)

アダプターを初期化するために呼び出されます。

OptionsはObjectであり、次のプロパティを持ちます。

  • useNonce - 認証レスポンスがリクエストと一致することを検証するための暗号化ノンスを追加します(デフォルトはtrue)。

  • onLoad - ロード時に実行するアクションを指定します。サポートされている値はlogin-requiredまたはcheck-ssoです。

  • silentCheckSsoRedirectUri - onLoadが「check-sso」に設定されている場合、サイレント認証チェックのリダイレクトURIを設定します。

  • silentCheckSsoFallback - ブラウザーでサイレントcheck-ssoがサポートされていない場合に、通常のcheck-ssoへのフォールバックを有効にします(デフォルトはtrue)。

  • token - トークンの初期値を設定します。

  • refreshToken - リフレッシュトークンの初期値を設定します。

  • idToken - IDトークンの初期値を設定します(tokenまたはrefreshTokenと組み合わせてのみ)。

  • scope - Keycloakログインエンドポイントへのデフォルトのスコープパラメーターを設定します。スペース区切りのスコープのリストを使用します。これらは通常、特定のクライアントで定義されたクライアントスコープを参照します。スコープopenidは常にアダプターによってスコープのリストに追加されることに注意してください。たとえば、スコープオプションaddress phoneを入力すると、Keycloakへのリクエストにはスコープパラメーターscope=openid address phoneが含まれます。ここで指定されたデフォルトスコープは、login()オプションがスコープを明示的に指定した場合に上書きされることに注意してください。

  • timeSkew - ローカル時間とKeycloakサーバー間のスキューの初期値を秒単位で設定します(tokenまたはrefreshTokenと組み合わせてのみ)。

  • checkLoginIframe - ログイン状態の監視を有効/無効にするように設定します(デフォルトはtrue)。

  • checkLoginIframeInterval - ログイン状態を確認する間隔を設定します(デフォルトは5秒)。

  • responseMode - ログインリクエストでKeycloakサーバーに送信するOpenID Connectレスポンスモードを設定します。有効な値はqueryまたはfragmentです。デフォルト値はfragmentです。これは、認証が成功した後、KeycloakがURLフラグメントに追加されたOpenID Connectパラメーターを使用してJavaScriptアプリケーションにリダイレクトすることを意味します。これは一般的にqueryよりも安全であり、推奨されます。

  • flow - OpenID Connectフローを設定します。有効な値はstandardimplicit、またはhybridです。

  • enableLogging - Keycloakからのログメッセージをコンソールに有効にします(デフォルトはfalse)。

  • pkceMethod - 使用するProof Key Code Exchange(PKCE)のメソッド。この値を設定すると、PKCEメカニズムが有効になります。利用可能なオプション

    • "S256" - SHA256ベースのPKCEメソッド(デフォルト)

    • false - PKCEは無効です。

  • acrValues - 認証コンテキストクラス参照を参照し、クライアントが必要な保証レベルの要件(認証メカニズムなど)を宣言できるようにするacr_valuesパラメーターを生成します。「セクション4. OpenID Connect MODRNA Authentication Profile 1.0のacr_valuesリクエスト値と保証レベル」を参照してください。

  • messageReceiveTimeout - Keycloakサーバーからのメッセージレスポンスを待機するタイムアウトをミリ秒単位で設定します。これは、たとえば、サードパーティCookieのチェック中にメッセージを待機する場合に使用されます。デフォルト値は10000です。

  • locale - onLoadが「login-required」の場合、OIDC 1.0仕様のセクション3.1.2.1に準拠して「ui_locales」クエリパラメーターを設定します。

初期化が完了すると解決されるPromiseを返します。

login(options)

ログインフォームにリダイレクトし、Promiseを返します。

OptionsはオプションのObjectであり、次のプロパティを持ちます。

  • redirectUri - ログイン後にリダイレクトするURIを指定します。

  • prompt - このパラメーターを使用すると、Keycloakサーバー側のログインフローをわずかにカスタマイズできます。たとえば、値loginの場合はログイン画面の表示を強制します。または、クライアントに同意が必要な場合に値consentの同意画面の表示を強制します。最後に、ログイン画面がユーザーに表示されないようにするために値noneを使用できます。これは、ユーザーが以前に認証されていた場合のSSOをチェックする場合にのみ役立ちます(これは、前述の値check-ssoを使用したonLoadチェックに関連しています)。

  • maxAge - ユーザーがすでに認証されている場合にのみ使用されます。ユーザーの認証が発生してからの最大時間を指定します。ユーザーがmaxAgeよりも長い時間認証されている場合、SSOは無視され、再度認証する必要があります。

  • loginHint - ログインフォームのユーザー名/メールフィールドを事前入力するために使用されます。

  • scope - この特定のログインのinitで設定されたスコープを別の値でオーバーライドします。

  • idpHint - ログインページを表示せずに、代わりに指定されたIDプロバイダーに自動的にリダイレクトするようにKeycloakに指示するために使用されます。詳細については、「IDプロバイダードキュメント」を参照してください。

  • acr - acrクレームに関する情報を含みます。これは、claimsパラメーター内でKeycloakサーバーに送信されます。一般的な使用法は、ステップアップ認証です。使用例:{ values: ["silver", "gold"], essential: true }。「OpenID Connect仕様」および「ステップアップ認証ドキュメント」の詳細を参照してください。

  • acrValues - 認証コンテキストクラス参照を参照し、クライアントが必要な保証レベルの要件(認証メカニズムなど)を宣言できるようにするacr_valuesパラメーターを生成します。「セクション4. OpenID Connect MODRNA Authentication Profile 1.0のacr_valuesリクエスト値と保証レベル」を参照してください。

  • action - 値がregisterの場合、ユーザーは登録ページにリダイレクトされます。詳細については、「クライアントによってリクエストされた登録セクション」を参照してください。値がUPDATE_PASSWORDまたは別のサポートされている必須アクションの場合、ユーザーはパスワードリセットページまたはその他の必須アクションページにリダイレクトされます。ただし、ユーザーが認証されていない場合、ユーザーはログインページに送信され、認証後にリダイレクトされます。詳細については、「アプリケーションによって開始されたアクションセクション」を参照してください。

  • locale - OIDC 1.0仕様のセクション3.1.2.1に準拠して「ui_locales」クエリパラメーターを設定します。

  • cordovaOptions - Cordovaインアップブラウザーに渡される引数(該当する場合)を指定します。オプションhiddenおよびlocationは、これらの引数の影響を受けません。利用可能なすべてのオプションは、https://cordova.dokyumento.jp/docs/en/latest/reference/cordova-plugin-inappbrowser/で定義されています。使用例:{ zoom: "no", hardwareback: "yes" };

createLoginUrl(options)

ログインフォームへのURLを含むPromiseを返します。

OptionsはオプションのObjectであり、関数loginと同じオプションをサポートします。

logout(options)

ログアウトにリダイレクトします。

OptionsはObjectであり、次のプロパティを持ちます。

  • redirectUri - ログアウト後にリダイレクトするURIを指定します。

createLogoutUrl(options)

ユーザーをログアウトさせるURLを返します。

OptionsはObjectであり、次のプロパティを持ちます。

  • redirectUri - ログアウト後にリダイレクトするURIを指定します。

register(options)

登録フォームにリダイレクトします。オプションaction = 'register'を使用したログインのショートカット

Optionsはloginメソッドと同じですが、「action」は「register」に設定されています

createRegisterUrl(options)

登録ページへのURLを含むPromiseを返します。オプションaction = 'register'を使用したcreateLoginUrlのショートカット

OptionsはcreateLoginUrlメソッドと同じですが、「action」は「register」に設定されています

accountManagement()

アカウントコンソールにリダイレクトします。

createAccountUrl(options)

アカウントコンソールへのURLを返します。

OptionsはObjectであり、次のプロパティを持ちます。

  • redirectUri - アプリケーションにリダイレクトバックするときにリダイレクトするURIを指定します。

hasRealmRole(role)

トークンに指定されたレルムロールがある場合はtrueを返します。

hasResourceRole(role, resource)

トークンにリソースの指定されたロールがある場合はtrueを返します(resourceはオプションです。指定しない場合はclientIdが使用されます)。

loadUserProfile()

ユーザープロファイルをロードします。

プロファイルで解決されるPromiseを返します。

例:

try {
    const profile = await keycloak.loadUserProfile();
    console.log('Retrieved user profile:', profile);
} catch (error) {
    console.error('Failed to load user profile:', error);
}

isTokenExpired(minValidity)

トークンの有効期限がminValidity秒未満の場合にtrueを返します(minValidityはオプションです。指定しない場合は0が使用されます)。

updateToken(minValidity)

トークンの有効期限がminValidity秒以内(minValidityはオプションです。指定しない場合は5が使用されます)の場合、トークンは更新されます。-1がminValidityとして渡されると、トークンは強制的に更新されます。セッションステータスiframeが有効になっている場合、セッションステータスもチェックされます。

トークンが更新されたかどうかを示すブール値で解決されるPromiseを返します。

例:

try {
    const refreshed = await keycloak.updateToken(5);
    console.log(refreshed ? 'Token was refreshed' : 'Token is still valid');
} catch (error) {
    console.error('Failed to refresh the token:', error);
}

clearToken()

トークンを含む認証状態をクリアします。これは、アプリケーションがセッションの有効期限切れを検出した場合(たとえば、トークンの更新が失敗した場合)に役立ちます。

これを呼び出すと、onAuthLogoutコールバックリスナーが呼び出されます。

コールバックイベント

アダプターは、特定のイベントのコールバックリスナーの設定をサポートしています。これらはinit()メソッドの呼び出し前に設定する必要があることに注意してください。

例:

keycloak.onAuthSuccess = () => console.log('Authenticated!');

利用可能なイベントは次のとおりです。

  • onReady(authenticated) - アダプターが初期化されたときに呼び出されます。

  • onAuthSuccess - ユーザーが正常に認証されたときに呼び出されます。

  • onAuthError - 認証中にエラーが発生した場合に呼び出されます。

  • onAuthRefreshSuccess - トークンが更新されたときに呼び出されます。

  • onAuthRefreshError - トークンを更新しようとしたときにエラーが発生した場合に呼び出されます。

  • onAuthLogout - ユーザーがログアウトした場合に呼び出されます(セッションステータスiframeが有効になっている場合、またはCordovaモードでのみ呼び出されます)。

  • onTokenExpired - アクセストークンの有効期限が切れたときに呼び出されます。リフレッシュトークンが利用可能な場合、トークンはupdateTokenで更新できます。または、利用できない場合(つまり、暗黙的フローの場合)、ログイン画面にリダイレクトして新しいアクセストークンを取得できます。

このページについて