2.2. JavaScript アダプター
Red Hat Single Sign-On には、クライアント側 JavaScript ライブラリーが同梱されており、これを使用して HTML5/JavaScript アプリケーションをセキュアにすることができます。JavaScript アダプターは、Cordova アプリケーションに対して組み込みサポートがあります。
NPM や Yarn などのパッケージマネージャーを使用して、アプリケーションに JavaScript アダプターを含めることが推奨されます。keycloak-js
パッケージは以下の場所で利用できます。
あるいは、ライブラリーは /auth/js/keycloak.js
にある Red Hat Single Sign-On サーバーから直接取得でき、ZIP アーカイブとして配布されます。
クライアント側のアプリケーションの使用に関する重要なことは、クライアントの認証情報をクライアント側のアプリケーションに保存する安全な方法がないため、クライアントがパブリッククライアントである必要があることです。これにより、クライアント用に設定したリダイレクト URI が正しく、可能な限り具体的であることを確認することが非常に重要になります。
JavaScript アダプターを使用するには、まず Red Hat Single Sign-On 管理コンソールでアプリケーションのクライアントを作成する必要があります。Access Type
で public
が選択されていることを確認してください。そのためには、機能設定で栗餡と認証トグルを OFF にします。
また、Valid Redirect URI
と Web Origins
を設定する必要があります。そうしないと、セキュリティーの脆弱性が生じる可能性があるため、できるだけ具体的にしてください。
クライアントが作成されたら、右上隅の Action
タブをクリックし、Download adapter config
を選択します。Format Option
で Keycloak OIDC JSON
を選択し、Download
をクリックします。ダウンロードした keycloak.json
ファイルは、HTML ページと同じ場所にある Web サーバーでホストされている必要があります。
または、設定ファイルを省略し、アダプターを手動で設定することもできます。
以下の例は、JavaScript アダプターを初期化する方法を示しています。
<html> <head> <script src="keycloak.js"></script> <script> function initKeycloak() { const options = {}; const keycloak = new Keycloak(); keycloak.init(options) .then(function(authenticated) { console.log('keycloak:' + (authenticated ? 'authenticated' : 'not authenticated')); }).catch(function(error) { for (const property in error) { console.error(`${property}: ${error[property]}`); } }); } </script> </head> <body onload="initKeycloak()"> <!-- your page content goes here --> </body> </html>
<html>
<head>
<script src="keycloak.js"></script>
<script>
function initKeycloak() {
const options = {};
const keycloak = new Keycloak();
keycloak.init(options)
.then(function(authenticated) {
console.log('keycloak:' + (authenticated ? 'authenticated' : 'not authenticated'));
}).catch(function(error) {
for (const property in error) {
console.error(`${property}: ${error[property]}`);
}
});
}
</script>
</head>
<body onload="initKeycloak()">
<!-- your page content goes here -->
</body>
</html>
keycloak.json
ファイルが別の場所にある場合は、それを指定することができます。
const keycloak = new Keycloak('http://localhost:8080/myapp/keycloak.json');
const keycloak = new Keycloak('http://localhost:8080/myapp/keycloak.json');
代わりに、必要な設定で JavaScript オブジェクトを渡すことができます。
const keycloak = new Keycloak({ url: 'http://keycloak-server$/auth', realm: 'myrealm', clientId: 'myapp' });
const keycloak = new Keycloak({
url: 'http://keycloak-server$/auth',
realm: 'myrealm',
clientId: 'myapp'
});
デフォルトでは認証を行うには login
関数を呼び出す必要があります。ただし、アダプターが自動的に認証されるようにするオプションは 2 つあります。login-required
または check-sso
を init 関数に渡すことができます。ユーザーが Red Hat Single Sign-On にログインしている場合は、login-required
がクライアントを認証します。そうでないと、ログインページが表示されます。check-sso
は、ユーザーがログインしていない場合のみクライアントを認証します。ユーザーがログインしていない場合、ブラウザーはアプリケーションにリダイレクトされ、認証されていないままになります。
silent check-sso
オプションを設定できます。この機能を有効にすると、ブラウザーは Red Hat Single Sign-On サーバーへのフルリダイレクトを行なさずにアプリケーションに戻りますが、このアクションは非表示の iframe で実行されるため、アプリケーションリソースを読み込むだけで済みます。アプリが初期化されたときにブラウザーによって 1 回解析され、Red Hat Single Sign-On からアプリにリダイレクトされた後に再度解析されることはありません。これは、SPA (Single Page Applications) の場合において特に便利です。
silent check-sso
を有効にするには、init メソッドで silentCheckSsoRedirectUri
属性を指定する必要があります。この URI は、アプリケーションで有効なエンドポイントである必要があります (そして、Red Hat Single Sign-On 管理コンソールでクライアントの有効なリダイレクトとして設定する必要があります)。
keycloak.init({ onLoad: 'check-sso', silentCheckSsoRedirectUri: window.location.origin + '/silent-check-sso.html' })
keycloak.init({
onLoad: 'check-sso',
silentCheckSsoRedirectUri: window.location.origin + '/silent-check-sso.html'
})
認証の状態が正常にチェックされ、Red Hat Single Sign-On サーバーからトークンを取得すると、サイレント check-sso リダイレクト URI のページが iframe に読み込まれます。受信したトークンをメインアプリケーションに送信する以外のタスクはなく、次のようになります。
<html> <body> <script> parent.postMessage(location.href, location.origin) </script> </body> </html>
<html>
<body>
<script>
parent.postMessage(location.href, location.origin)
</script>
</body>
</html>
指定された場所にあるこのページは、アプリケーション自身が提供する必要があり、JavaScript アダプターの一部では ない ことに注意してください。
静かな check-sso
機能は、一部の最新のブラウザーで制限さていれます。トラッキング防止セクションを実装する最新のブラウザー を参照してください。
login-required
を有効にするには、onLoad
を login-required
に設定し、init メソッドに渡します。
keycloak.init({ onLoad: 'login-required' })
keycloak.init({
onLoad: 'login-required'
})
ユーザーが認証された後、アプリケーションは 認可
ヘッダーにベアラートークンを含めることで、Red Hat Single Sign-On で保護された RESTful サービスへのリクエストを行うことができます。以下に例を示します。
const loadData = function () { document.getElementById('username').innerText = keycloak.subject; const url = 'http://localhost:8080/restful-service'; const req = new XMLHttpRequest(); req.open('GET', url, true); req.setRequestHeader('Accept', 'application/json'); req.setRequestHeader('Authorization', 'Bearer ' + keycloak.token); req.onreadystatechange = function () { if (req.readyState == 4) { if (req.status == 200) { alert('Success'); } else if (req.status == 403) { alert('Forbidden'); } } } req.send(); };
const loadData = function () {
document.getElementById('username').innerText = keycloak.subject;
const url = 'http://localhost:8080/restful-service';
const req = new XMLHttpRequest();
req.open('GET', url, true);
req.setRequestHeader('Accept', 'application/json');
req.setRequestHeader('Authorization', 'Bearer ' + keycloak.token);
req.onreadystatechange = function () {
if (req.readyState == 4) {
if (req.status == 200) {
alert('Success');
} else if (req.status == 403) {
alert('Forbidden');
}
}
}
req.send();
};
注意すべきことの 1 つは、アクセストークンの有効期限はデフォルトで短いため、リクエストを送信する前にアクセストークンの更新が必要になることが場合があることです。これは updateToken
メソッドで行うことができます。updateToken
メソッドは、トークンが正常に更新された場合にのみサービスを呼び出し、そうでない場合にはユーザーにエラーを表示することを容易にする Promise を返します。以下に例を示します。
keycloak.updateToken(30).then(function() { loadData(); }).catch(function() { alert('Failed to refresh token'); });
keycloak.updateToken(30).then(function() {
loadData();
}).catch(function() {
alert('Failed to refresh token');
});
2.2.1. セッションステータスの iframe
デフォルトでは、JavaScript アダプターは、Single-Sign Out が発生したかどうかを検出するために使用される非表示の iframe を作成します。これにはネットワークトラフィックは必要ありません。代わりに、特別なステータスクッキーを確認してステータスを取得します。init
メソッドに渡されるオプションで checkLoginIframe: false
を設定することで、この機能を無効できます。
このクッキーを直接参照する必要はありません。この形式は変更でき、アプリケーションではなく、Red Hat Single Sign-On サーバーの URL に関連付けられている可能性があります。
セッションステータスの iframe 機能は、一部の最新のブラウザーで制限されています。トラッキング防止セクションを実装する最新のブラウザー を参照してください。
2.2.2. 暗黙的フローおよびハイブリッドフロー
デフォルトでは、JavaScript アダプターは Authorization Code フローを使用します。
このフローでは、Red Hat Single Sign-On サーバーは、認可トークンではなく、認可コードをアプリケーションに返します。JavaScript アダプターは、ブラウザーがアプリケーションにリダイレクトされた後に、アクセストークンと更新トークンの コード
を交換します。
Red Hat Single Sign-On は、Red Hat Single Sign-On で認証に成功した直後にアクセストークンが送信される Implicit フローもサポートしています。これは、コードをトークンと交換する追加のリクエストがないため、標準フローよりもパフォーマンスが向上する可能性がありますが、アクセストークンの有効期限が切れると影響があります。
ただし、URL フラグメントでアクセストークンを送信すると、セキュリティー脆弱性が発生する可能性があります。たとえば、トークンは Web サーバーログやブラウザー履歴によってリークされる可能性があります。
暗黙のフローを有効にするには、Red Hat Single Sign-On 管理コンソールで、クライアントの Implicit Flow Enabled
フラグを有効にする必要があります。また、init
メソッドに implicit
値を持つパラメーター フロー
を渡す必要があります。
keycloak.init({ flow: 'implicit' })
keycloak.init({
flow: 'implicit'
})
注記 1 つは、アクセストークンのみが提供され、更新トークンはありません。そのため、アクセストークンの期限が切れると、アプリケーションが Red Hat Single Sign-On に再度リダイレクトして新しいアクセストークンを取得する必要があります。
Red Hat Single Sign-On は、Hybrid フローにも対応しています。
これは、クライアントが管理コンソールで Standard Flow Enabled
フラグおよび Implicit Flow Enabled
フラグの両方を有効にしている必要があります。次に、Red Hat Single Sign-On サーバーは、コードとトークンの両方をアプリケーションに送信します。アクセストークンは、コードのアクセスと更新トークンを交換して、すぐに使用できます。暗黙的なフローと同様に、アクセストークンがすぐに利用できるため、ハイブリッドフローはパフォーマンスに適しています。ただし、トークンは URL で依然として送信され、前述のセキュリティーの脆弱性は引き続き適用されます。
Hybrid フローの利点の 1 つは、更新トークンがアプリケーションで利用できることです。
ハイブリッドフローの場合は、パラメーター flow
の値 hybrid
を init
メソッドに渡す必要があります。
keycloak.init({ flow: 'hybrid' })
keycloak.init({
flow: 'hybrid'
})
2.2.3. Cordova でのハイブリッドアプリケーション
Keycloak は、Apache Cordova で開発されたハイブリッドモバイルアプリをサポートしています。JavaScript アダプターには、cordova
および cordova-native
の 2 つのモードがあります。
デフォルトは cordova で、アダプターのタイプが設定されておらず、window.cordova が存在する場合は自動的に選択されます。ログインすると、ユーザーが Red Hat Single Sign-On を操作できる InApp ブラウザー が開き、その後 http://localhost
リダイレクトしてアプリに戻ります。このため、管理コンソールのクライアント設定セクションでこの URL を有効な redirect-uri としてホワイトリスト化する必要があります。
このモードの設定は簡単ですが、いくつかの欠点もあります。
- InApp-Browser はアプリに組み込まれたブラウザーで、電話のデフォルトブラウザーではありません。したがって、設定が異なり、保存されている認証情報は利用できません。
- 特に複雑な内容をレンダリングする場合は、InApp-Browser も遅くなる可能性があります。
- このモードを使用する前に、アプリがログインページをレンダリングするブラウザーを完全に制御できるため、アプリがユーザーの認証情報にアクセスできる可能性があるなど、セキュリティー上の懸念事項を考慮する必要があります。そのため、信頼できないアプリの使用は許可しないでください。
この例のアプリ (https://github.com/keycloak/keycloak/tree/master/examples/cordova) で初めてみましょう。
代替モードの cordova-native
は別のアプローチを取っています。システムのブラウザーを使用してログインページが開きます。ユーザーが認証されると、ブラウザーは特別な URL を使用してアプリにリダイレクトします。そこから、Red Hat Single Sign-On アダプターは、URL からコードまたはトークンを読み取り、ログインを終了できます。
init
メソッドにアダプター型の cordova-native
を渡すことで、ネイティブモードを有効できます。
keycloak.init({ adapter: 'cordova-native' })
keycloak.init({
adapter: 'cordova-native'
})
このアダプターには、以下の 2 つのプラグインが必要です。
- cordova-plugin-browsertab: システムのブラウザーで Web ページを開くことができます。
- cordova-plugin-deeplinks: ブラウザーが特別な URL でアプリにリダイレクトできるようにします。
アプリへのリンクの技術情報は、各プラットフォームや特別な設定によって異なります。詳細は、deeplinks プラグインのドキュメント の Android と iOS のセクションを参照してください。
アプリを開くためのリンクにはさまざまな種類があります。カスタムスキーム (myapp://login
または android-app://com.example.myapp/https/example.com/login
) と ユニバーサルリンク (iOS)/Deep Links (Android) です。前者はセットアップが簡単で信頼性が高い傾向がありますが、後者は一意であり、ドメインの所有者のみが登録できるため、セキュリティーが強化されます。カスタム URL は iOS で非推奨になりました。最高の信頼性を得るには、ユニバーサルリンクをカスタム URL リンクのあるフォールバックサイトと組み合わせて使用することを推奨します。
さらに、Keycloak アダプターとの互換性を改善するには、以下の手順が推奨されます。
-
iOS のユニバーサルリンクは、
response-mode
をquery
に設定すると、より確実に動作するようです。 -
リダイレクト時に Android がアプリの新しいインスタンスを開かないようにするには、次のスニペットを
config.xml
に追加します。
<preference name="AndroidLaunchMode" value="singleTask" />
<preference name="AndroidLaunchMode" value="singleTask" />
ネイティブモードの使い方を示すアプリの例 (https://github.com/keycloak/keycloak/tree/master/examples/cordova-native) があります。
2.2.4. カスタムアダプター
デフォルトでサポートされていない環境で JavaScript クライアントを実行する必要がある場合があります (Capacitor など)。このような不明な環境で JavasScript クライアントを使用できるようにするために、カスタムアダプターを渡すことができます。たとえば、サードパーティーのライブラリーは、このようなアダプターを提供して、問題なく JavaScript クライアントを実行できます。
import Keycloak from 'keycloak-js'; import KeycloakCapacitorAdapter from 'keycloak-capacitor-adapter'; const keycloak = new Keycloak(); keycloak.init({ adapter: KeycloakCapacitorAdapter, });
import Keycloak from 'keycloak-js';
import KeycloakCapacitorAdapter from 'keycloak-capacitor-adapter';
const keycloak = new Keycloak();
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 = { login(options) { // Write your own implementation here. } // The other methods go here... }; const keycloak = new Keycloak(); keycloak.init({ adapter: MyCustomAdapter, });
import Keycloak, { KeycloakAdapter } from 'keycloak-js';
// Implement the 'KeycloakAdapter' interface so that all required methods are guaranteed to be present.
const MyCustomAdapter: KeycloakAdapter = {
login(options) {
// Write your own implementation here.
}
// The other methods go here...
};
const keycloak = new Keycloak();
keycloak.init({
adapter: MyCustomAdapter,
});
タイプ情報を省略することで TypeScript を使用せずにこれを実行することもできますが、インターフェイスを確実に適切に実装することは、完全にユーザー次第となります。
2.2.5. 以前のブラウザー
JavaScript アダプターは、Base64 (window.btoa および window.atob)、HTML5 History API、およびオプションで Promise API に依存します。これらが利用できないブラウザーをサポートする必要がある場合 (例: IE9) は、polyfillers を追加する必要があります。
ポリフィルライブラリーの例:
- Base64 - https://github.com/davidchambers/Base64.js
- HTML5 History - https://github.com/devote/HTML5-History-API
- Promise - https://github.com/stefanpenner/es6-promise
2.2.6. 追跡保護機能を備えた最新のブラウザー
一部のブラウザーの最新版では、Chrome の SameSite や完全にブロックされたサードパーティーの cookie など、サードパーティーによるユーザーの追跡を防ぐためにさまざまな cookie ポリシーが適用されています。これらのポリシーは、時間の経過とともにさらに制限され、他のブラウザーによって採用され、最終的にはサードパーティーのコンテキストの cookie が完全にサポートされず、ブラウザーによってブロックされることが予想されます。これの影響を受けるアダプター機能は、今後非推奨となる可能性があります。
JavaScript アダプターは、セッションステータスの iframe、サイレント check-sso
、および部分的に通常の (非サイレント) check-sso
についても、サードパーティーの cookie に依存しています。これらの機能は、機能が制限されているか、ブラウザーが cookie に関してどのように制限されているかに基づいて完全に無効になっています。アダプターはこの設定を検出しようとし、それに応じて反応します。
2.2.6.1. SameSite=Lax by Default ポリシーを持つブラウザー
Red Hat Single Sign-On 側およびアプリケーション側で SSL / TLS 接続が設定されている場合、すべての機能がサポートされます。影響を受けるのは、たとえば、バージョン 84 以降の Chrome などです。
2.2.6.2. サードパーティーの Cookie がブロックされているブラウザー
セッションステータス iframe はサポートされず、このようなブラウザーの動作が JS アダプターによって検出されると自動的に無効になります。これは、アダプターは Single Sign-Out 検出にセッション cookie を使用できず、純粋にトークンに依存する必要があることを意味します。これは、ユーザーが別のウィンドウでログアウトすると、JavaScript アダプターを使用しているアプリケーションは、アクセストークンを更新しようとするまでログアウトされないことを意味します。したがって、アクセストークンの有効期間を比較的短い時間に設定して、ログアウトが後でではなく、早くに検出されるようにすることを推奨します。Session and Token Timeouts を参照してください。
サイレント check-sso
はサポートされず、デフォルトで通常の (非サイレント) check-sso
にフォールバックします。この動作は、init
メソッドに渡されるオプションで silentCheckSsoFallback: false
を設定することで変更できます。この場合、制限的なブラウザー動作が検出されると、check-sso
は完全に無効になります。
通常の check-sso
も影響を受けます。セッションステータス iframe がサポートされていないため、アダプターがユーザーのログインステータスをチェックするために初期化される際に、Red Hat Single Sign-On への追加のリダイレクトを行う必要があります。これは、ユーザーがログインしているかどうかを示すために iframe を使用する標準の動作とは異なり、リダイレクトはログアウト時にのみ実行されます。
影響を受けるブラウザーは、たとえば、バージョン 13.1 以降の Safari などです。
2.2.7. JavaScript アダプターリファレンス
2.2.7.1. コンストラクター
new Keycloak(); new Keycloak('http://localhost/keycloak.json'); new Keycloak({ url: 'http://localhost/auth', realm: 'myrealm', clientId: 'myApp' });
new Keycloak();
new Keycloak('http://localhost/keycloak.json');
new Keycloak({ url: 'http://localhost/auth', realm: 'myrealm', clientId: 'myApp' });
2.2.7.2. プロパティー
- authenticated
-
ユーザーが認証されている場合は
true
、そうでない場合はfalse
です。 - token
-
サービスへのリクエストで
Authorization
ヘッダーで送ることができる base64 エンコードされたトークン。 - tokenParsed
- 解析されたトークンを JavaScript オブジェクトとして実行します。
- subject
- ユーザー id
- idToken
- base64 でエンコードされた ID トークン。
- idTokenParsed
- 解析された id トークンを JavaScript オブジェクトとして実行します。
- realmAccess
- トークンに関連付けられたレルムロール。
- resourceAccess
- トークンに関連付けられたリソースロール。
- refreshToken
- 新しいトークンの取得に使用できる base64 でエンコードされた更新トークン。
- refreshTokenParsed
- JavaScript オブジェクトとして解析された更新トークン。
- timeSkew
- ブラウザー時間と Red Hat Single Sign-On サーバー間の推定時間 (秒単位)。この値は見積りませんが、トークンの有効期限が切れているかどうかを判断します。
- responseMode
- init で渡される応答モード (デフォルト値は fragment)。
- flow
- init に渡されるフロー。
- adapter
リダイレクトする方法と、その他のブラウザー関連の機能がライブラリーによって処理される方法を上書きできます。利用可能なオプション:
- "default" - ライブラリーがリダイレクトにブラウザー api を使用します (これがデフォルトです)。
- "cordova" - ライブラリーは、InAppBrowser cordova プラグインを使用して keycloak のログイン/登録ページのロードを試みます (ライブラリーが cordova エコシステムで動作している場合、このオプションが自動的に使用されます)
- "cordova-native" - ライブラリーは、BrowserTabs cordova プラグインを使用して、電話のシステムブラウザーでログインおよび登録ページを開くことを試みます。これには、アプリケーションにリダイレクトするための追加の設定が必要です (「Cordova でのハイブリッドアプリケーション」 を参照)。
- "custom" - カスタムアダプターを実装できます (高度な使用ケースのみ)。
- responseType
- ログイン要求で Red Hat Single Sign-On に送信された応答タイプ。これは初期化時に使用されるフロー値に基づいて決定されますが、この値を設定すると上書きできます。
2.2.7.3. メソッド
init(options)
アダプターを初期化するために呼び出されます。
オプションはオブジェクトです。ここでは、以下のようになります。
-
useNonce - 暗号化ナンスを追加して、認証応答がリクエストと一致することを確認します (デフォルトは
true
)。 -
onLoad - 読み込み時に実行するアクションを指定します。サポートされている値は、
login-required
またはcheck-sso
です。 - silentCheckSsoRedirectUri - onLoad が 'check-sso' に設定されている場合に、サイレント認証チェックのリダイレクト URI を設定します。
-
silentCheckSsoFallback: サイレント
check-sso
がブラウザーでサポートされない場合に、通常のcheck-sso
へのフォールバックを有効にします (デフォルトはtrue
)。 - token - トークンに初期値を設定します。
- refreshToken - 更新トークンの初期値を設定します。
- idToken - id トークンに初期値を設定します (トークンまたは refreshToken とともにのみ)。
-
スコープ - デフォルトのスコープパラメーターを Red Hat Single Sign-On ログインエンドポイントに設定します。スコープのスペースで区切られたリストを使用します。これらは通常、特定のクライアントで定義された クライアントスコープ を参照します。スコープの
openid
は、アダプターによって常にスコープのリストに追加されることに注意してください。例えば、スコープオプションのaddress phone
を入力すると、Red Hat Single Sign-On へのリクエストにはスコープパラメーターscope=openid address phone
が含まれます。login()
オプションでスコープを明示的に指定すると、ここで指定したデフォルトのスコープが上書きされることに注意してください。 - timeSkew - ローカルタイムと Red Hat Single Sign-On サーバー間のスキュー用に初期値を設定します (トークンと refreshToken の場合のみ)。
-
checkLoginIframe - ログイン状態の監視を有効にするかどうかを設定します (デフォルト値は
true
)。 - checkLoginIframeInterval - ログイン状態を確認する間隔を設定します (デフォルトは 5 秒です)。
-
responseMode - ログイン要求時に OpenID Connect 応答モードを Red Hat Single Sign-On サーバーに送信します。有効な値は
query
またはfragment
です。デフォルト値はfragment
で、認証に成功した後、OpenID Connect パラメーターを URL フラグメントに追加した JavaScript アプリケーションに Red Hat Single Sign-On がリダイレクトすることを意味します。これは一般的には、より安全で、query
を介して推奨されています。 -
flow - OpenID Connect フローを設定します。有効な値は、
standard
、implicit
、またはhybrid
です。 -
enableLogging - Keycloak からコンソールへのログメッセージを有効にします (デフォルトは
false
です)。 pkceMethod - 使用する Proof Key Code Exchange (PKCE) 方式。この値を設定すると、PKCE メカニズムが有効になります。利用可能なオプション:
- S256 - SHA256 ベースの PKCE メソッド
- messageReceiveTimeout: Keycloak サーバーからのメッセージ応答を待つタイムアウトをミリ秒単位で設定します。これは、たとえば、サードパーティーの Cookie チェック中に、メッセージを待機するときに使用されます。デフォルト値は 10000 です。
初期化の完了時に解決する promise を返します。
login(options)
ログインフォームにリダイレクトします。
options は任意のオブジェクトです。ここでは、以下のようになります。
- redirectUri - ログイン後にリダイレクトする URI を指定します。
-
prompt - このパラメーターは、Red Hat Single Sign-On サーバー側でログインフローを若干カスタマイズできるようにします。たとえば、値の
login
の場合、ログイン画面の表示を強制します。prompt
パラメーターの詳細および使用できるすべての値については、パラメーター転送 セクションを参照してください。 -
maxAge - ユーザーがすでに認証されている場合にのみ使用します。ユーザーの認証が発生した時点の最大時間を指定します。ユーザーが
maxAge
よりも長い期間認証されている場合、SSO は無視されるため、再認証が必要になります。 - loginHint - ログインフォームの username/email フィールドを事前に入力するのに使用されます。
-
scope -
init
で設定されたスコープを、この特定ログインの別の値でオーバーライドします。 - idpHint - Red Hat Single Sign-On に対して、ログインページの表示を省略し、代わりに指定されたアイデンティティープロバイダーに自動的にリダイレクトするように指示するために使用されます。詳細は、Identity Provider のドキュメント を参照してください。
-
acr:
acr
要求についての情報が含まれます。これは、要求
パラメーター内で Red Hat Single Sign-On サーバーに送信されます。一般的な用途は、段階的な認証です。使用例:{ values: ["silver", "gold"], essential: true }
詳細は、OpenID Connect の仕様および Step-up authentication documentation を参照してください。 -
action - 値が
register
の場合、ユーザーは登録ページにリダイレクトされます。値がUPDATE_PASSWORD
の場合、ユーザーはリセットパスワードページにリダイレクトされます (認証がない場合、ユーザーは最初にログインページに送信され、認証後にリダイレクトされます)。それ以外の場合は、ログインページにリダイレクトされます。 - locale - OIDC 1.0 仕様のセクション 3.1.2.1 に従って 'ui_locales' クエリーパラメーターを設定します。
-
cordovaOptions - Cordova in-app-browser (該当する場合) に渡される引数を指定します。
hidden
オプションおよびlocation
オプションは、これらの引数の影響を受けません。利用可能なすべてのオプションは https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/ で定義されています。使用例:{ zoom: "no", hardwareback: "yes" }
;
createLoginUrl(options)
ログインフォームへの URL を返します。
options は任意のオブジェクトで、関数 login
と同じオプションをサポートします。
logout(options)
ログアウトにリダイレクトされます。
オプションはオブジェクトです。ここでは、以下のようになります。
- redirectUri - ログアウト後にリダイレクトする URI を指定します。
createLogoutUrl(options)
ユーザーをログアウトするための URL を返します。
オプションはオブジェクトです。ここでは、以下のようになります。
- redirectUri - ログアウト後にリダイレクトする URI を指定します。
register(options)
登録フォームにリダイレクトされます。オプション action = 'register' を使用したログインのショートカット
オプションは login メソッドと同じですが、'action' は 'register' に設定されます。
createRegisterUrl(options)
登録ページへの URL を返します。オプション action = 'register' を持つ createLoginUrl のショートカット
オプションは createLoginUrl メソッドと同じですが、'action' は 'register' に設定されます。
accountManagement()
アカウント管理コンソールにリダイレクトされます。
createAccountUrl(options)
アカウント管理コンソールに URL を返します。
オプションはオブジェクトです。ここでは、以下のようになります。
- redirectUri: アプリケーションにリダイレクトする際にリダイレクトする URI を指定します。
hasRealmRole(role)
トークンに指定のレルムロールがある場合は true を返します。
hasResourceRole(role, resource)
トークンにリソースの指定されたロールがある場合に true を返します (指定の clientId が使用されていない場合、リソースは任意です)。
loadUserProfile()
ユーザープロファイルを読み込みます。
プロファイルで解決する promise を返します。
以下に例を示します。
keycloak.loadUserProfile() .then(function(profile) { alert(JSON.stringify(profile, null, " ")) }).catch(function() { alert('Failed to load user profile'); });
keycloak.loadUserProfile()
.then(function(profile) {
alert(JSON.stringify(profile, null, " "))
}).catch(function() {
alert('Failed to load user profile');
});
isTokenExpired(minValidity)
トークンの有効期限が切れる前にトークンが minValidity 秒未満の場合は true を返します (minValidity は任意であり、指定されていない場合は 0 が使用されます)。
updateToken(minValidity)
トークンが minValidity 秒以内に期限切れになると (minValidity は任意で、指定されていない場合は 5 が使用されます)、トークンが更新されます。-1 が minValidity として渡された場合、トークンは強制的に更新されます。セッションステータスが iframe が有効になっている場合は、セッションステータスもチェックされます。
トークンが更新されているかどうかを示すブール値で解決する promise を返します。
以下に例を示します。
keycloak.updateToken(5) .then(function(refreshed) { if (refreshed) { alert('Token was successfully refreshed'); } else { alert('Token is still valid'); } }).catch(function() { alert('Failed to refresh the token, or the session has expired'); });
keycloak.updateToken(5)
.then(function(refreshed) {
if (refreshed) {
alert('Token was successfully refreshed');
} else {
alert('Token is still valid');
}
}).catch(function() {
alert('Failed to refresh the token, or the session has expired');
});
clearToken()
トークンを含む認証状態を消去します。これは、トークンの更新が失敗した場合など、セッションの期限が切れたことをアプリケーションが検出する場合に役立ちます。
これを呼び出すと、onAuthLogout コールバックリスナーが呼び出されます。
2.2.7.4. コールバックイベント
アダプターは、特定のイベントの callback リスナーの設定をサポートします。これらは init
関数を呼び出す前に設定する必要があることに注意してください。
以下に例を示します。
keycloak.onAuthSuccess = function() { alert('authenticated'); }
keycloak.onAuthSuccess = function() { alert('authenticated'); }
利用可能なイベントは以下のとおりです。
- onReady(authenticated) - アダプターが初期化されると呼び出されます。
- onAuthSuccess - ユーザーが正常に認証されると呼び出しされます。
- onAuthError - 認証中にエラーが発生した場合に呼び出しされます。
- onAuthRefreshSuccess - トークンの更新時に呼び出しされます。
- onAuthRefreshError - トークンの更新中にエラーが発生した場合に呼び出します。
- onAuthLogout - ユーザーがログアウトした場合に呼び出されます (セッションステータス iframe が有効になっている場合、または Cordova モードの場合にのみ呼び出されます)。
- onTokenExpired - アクセストークンの期限が切れたときに呼び出しされます。更新トークンが利用可能な場合、トークンは updateToken で更新できます。利用できない場合 (つまり暗黙的なフローの場合) は、ログイン画面にリダイレクトして新しいアクセストークンを取得できます。