Citrix ADC

nFactorを使用してcookieを設定する

nFactorカスタムラベルを適用し、認証フローの要素としてCookieを設定できます。カスタムラベルを使用して、JavaScriptを使用してログインスキーマを操作できます。

cookieを要素として設定するには、スキーマなしログインで実行される情報をユーザーに表示する必要はありません。代わりに、ユーザーのブラウザを操作して、必要なデータを格納するようにログインスキーマに指示する必要があります。ログインスキーマは、ページがロードされたときにcookieを設定するために必要です。cookieは、カスタムラベルとJavaScriptコードで設定されます。

Cookieを設定する要素を実装するには、cookie.xmlという名前のXMLファイルを作成し、スキーマを /nsconfig/loginschema/ ディレクトリに格納します。

<?xml version="1.0" encoding="UTF-8"?>
<AuthenticateResponse xmlns="http://citrix.com/authentication/response/1">
<Status>success</Status>
<Result>more-info</Result>
<StateContext></StateContext>
<AuthenticationRequirements>
<PostBack>/nf/auth/doAuthentication.do</PostBack>
<CancelPostBack>/nf/auth/doLogoff.do</CancelPostBack>
<CancelButtonText>Cancel</CancelButtonText>
<Requirements>

<Requirement>
<Credential><ID>nsg_cookie</ID><Type>nsg_cookie</Type></Credential>
<Label><Text>Logon Type:</Text><Type>Plain</Type></Label>
</Requirement>

<Requirement>
<Credential><ID>loginBtn</ID><Type>none</Type></Credential>
<Label><Type>none</Type></Label><Input><Button>Log On</Button></Input>
</Requirement>

</Requirements>
</AuthenticationRequirements>
</AuthenticateResponse>

このXMLでは:

  • カスタムラベルnsg_cookieは、In this XML;を作成し、フォームとフォームボタンを送信するために使用されます。
  • RFWebUI_Custom は、RFWebUIテーマに基づく新しいポータル・テーマです。

nFactorを使用してcookieを設定する手順

  1. RFWebui テーマに基づいてポータル・テーマを作成します。

    add vpn portaltheme RfWebUI_custom -basetheme RfWebUI
    

    このコマンドは、/var/NetScaler/logon/themes/RFWebUI_Customでこのテーマのフォルダを作成します

  2. /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 = $("<div></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=CookieValeu;" + expires + ";path=/";
    
            //Submit form
            document.getElementById('loginBtn').click();
            });
            return div;
        }
    });
    

    このコードは次の処理を実行します:

    • ブラウザがページの読み込みを完了するのを待ちます
    • 1000日間有効な、値cookievalueを持つNSC_COOKIE_NAMEと呼ばれるlogon/themesを設定します
    • フォームを自動送信します。

    cookieが作成され、ユーザーはページと対話する必要はありません。

  3. 設定された cookie要素を表すポリシーラベルにバインドするログインスキーマを作成します。

    add authentication loginSchema Cookie_LS -authenticationSchema "/nsconfig/loginschema/cookie.xml"
    
  4. NO_AUTHN 認証ポリシーを作成して、設定された cookie要素を表すポリシーラベルにバインドします。

    add authentication Policy NO_AUTHN_POL -rule TRUE -action NO_AUTHN
    

    このポリシーは常にtrueと評価され、ユーザーを次の要素に移動するか、認証フローを完了します。

  5. ポータルテーマRFWebUI_CustomをCitrix Gateway仮想サーバーまたはCitrix ADC AAA仮想サーバーにバインドします。

nFactorを使用してcookieを設定する