nFactor を使用してクッキーを設定する
nFactor カスタムラベルを適用し、認証フローの要素として Cookie を設定できます。カスタムラベルを使用すると、JavaScript を使用してログインスキーマを操作できます。
Cookie を要素として設定するために、スキーマなしのログインで実行される情報をユーザーに表示する必要はありません。代わりに、ユーザーのブラウザと対話して、必要なデータを格納するようにログインスキーマに指示する必要があります。ログインスキーマは、ページが読み込まれたときに Cookie を設定するために必要です。クッキーはカスタムラベルと JavaScript コードで設定されます。
Cookie を設定する要素を実装するには、cookie.xml という名前の XML ファイルを作成し、スキーマを /nsconfig/loginschema/ ディレクトリに以下の内容で保存します。
success more-info /nf/auth/doAuthentication.do /nf/auth/doLogoff.do Cancel nsg_cookie nsg_cookie loginBtn none
この XML では
- カスタムラベル nsg_cookie は、Cookie を作成してフォームを送信し、フォームボタンを送信するために使用されます。
- RFWebUI_Custom は、RFWebUI テーマに基づいた新しいポータルテーマです。
nFactor を使用してクッキーを設定する手順
RFWebUI テーマに基づいてポータルテーマを作成します。
add vpn portaltheme RfWebUI_custom -basetheme RfWebUI
このコマンドは、/var/netscaler/logon/themes/rfwebUI_CUSTOM にこのテーマのフォルダーを作成します。
/var/netscaler/logon/themes/RfWebUI_custom/script.js ファイルを編集し、次のスクリプトを追加します。
CTXS.ExtensionAPI.addCustomCredentialHandler({ // The name of the credential, must match the type returned by the server getCredentialTypeName: function () { return "nsg_cookie"; }, // Generate HTML for the custom credential getCredentialTypeMarkup: function (requirements) { var div = $(""); $(document).ready(function() { //Set cookie valid for 1000 days var exdays = 1000; var d = new Date(); d.setTime(d.getTime() + (exdays\*24\*60\*60\*1000)); var expires = "expires="+ d.toUTCString(); document.cookie = "NSC_COOKIE_NAME=CookieValue;" + expires + ";path=/"; //Submit form document.getElementById('loginBtn').click(); }); return div; } });
このコードは次の処理を実行します。
- ブラウザがページの読み込みを完了するのを待ちます。
- NSC_COOKIE_NAME という名前のクッキーを cookieValue という値で設定します。1000 日間有効です。
- フォームを自動送信します。
クッキーが作成され、ユーザーはページを操作する必要がありません。
ログインスキーマを作成して、set cookie ファクターを表すポリシーラベルにバインドします。
add authentication loginSchema Cookie_LS -authenticationSchema "/nsconfig/loginschema/cookie.xml"
NO_AUTHN 認証ポリシーを作成して、設定された Cookie 係数を表すポリシーラベルにバインドします。
add authentication Policy NO_AUTHN_POL -rule TRUE -action NO_AUTHN
このポリシーは常に true と評価され、ユーザは次の要素に移動するか、認証フローを完了します。
ポータルテーマrfwebUI_customをCitrix Gateway 仮想サーバーまたはCitrix ADC AAA仮想サーバーにバインドします。