Citrix ADC

nFactor-Erweiterbarkeit

nFactor Authentication Framework bietet die Flexibilität, Anpassungen hinzuzufügen, um die Anmeldeschnittstelle intuitiver für eine umfassende Benutzererfahrung zu machen. Sie können benutzerdefinierte Anmeldebeschriftungen, benutzerdefinierte Anmeldedaten, Anpassen von Benutzeroberflächenanzeigern usw. hinzufügen.

Mit nFactor kann jeder Faktor einen eigenen Anmeldebildschirm haben. In jedem Anmeldebildschirm können Sie alle Informationen aus einem der vorherigen Faktoren oder mehr Informationen präsentieren, die in anderen Faktoren unsichtbar sind. Der letzte Faktor kann beispielsweise eine informative Seite sein, auf der der Benutzer Anweisungen liest und auf Weiter klickt.

Vor nFactor waren benutzerdefinierte Anmeldeseiten begrenzt, Anpassungen und benötigte Unterstützung. Es war möglich, die tmindex.html zu ersetzen oder Rewrite-Regeln anzuwenden, um ein Teil des Verhaltens zu ändern. Es war jedoch nicht möglich, die zugrunde liegende Funktionalität zu erreichen.

Die folgenden nFactor-bezogenen Anpassungen werden in diesem Thema ausführlich erfasst.

  • Anpassen von Anmeldebeschriftungen
  • Anpassen der Benutzeroberfläche für die Anzeige von Bildern
  • Anpassen des Citrix ADC nFactor Anmeldeformulars

Annahmen

Sie sind mit nFactor, Shell-Befehlen, XML und Texteditoren vertraut.

Voraussetzungen

  • Die in diesem Thema beschriebene Anpassung ist nur möglich, wenn das RFWeb-Benutzeroberflächenthema (oder themenbasiert) auf Citrix ADC konfiguriert ist.
  • Die Authentifizierungsrichtlinie muss an den virtuellen Server für Authentifizierung, Autorisierung und Überwachung gebunden sein, andernfalls funktioniert der Flow nicht wie vorgesehen. Weitere Informationen finden Sie unter CTX224241.
  • Sie haben die folgenden Elemente bezogen auf nFactor
    • XML-Schema
    • JavaScript
    • Authentifizierungsaktionen
    • Virtueller Authentifizierungsserver
    • Citrix ADC Version 11.1 und höher

Anpassen von Anmeldebeschriftungen

Um Anmeldebeschriftungen anzupassen, benötigen Sie Folgendes:

  • Das XML-Schema, das beschreibt, wie die Anmeldeseite aussieht.
  • Die Datei script.js, die das JavaScript enthält, das zum Ändern des Rendering-Prozesses verwendet wird.

Funktionsweise

Das JavaScript analysiert die XML-Datei und rendert jedes Element innerhalb des<Requirements> Tags. Jedes Element entspricht einer Zeile im HTML-Formular. Ein Anmeldefeld ist beispielsweise eine Zeile, das Kennwortfeld ist eine andere Zeile und die Anmeldeschaltfläche. Um neue Zeilen einzuführen, müssen Sie sie in der XML-Schemadatei mit dem StoreFront SDK angeben. Das StoreFront SDK ermöglicht es der Anmeldeseite mit einem XML-Schema, das<Requirement> Tag zu verwenden und Elemente darauf zu definieren. Diese Elemente ermöglichen es, JavaScript zu verwenden, um alle HTML-Elemente in diesem Raum einzuführen, die benötigt werden. In diesem Fall wird eine Zeile mit etwas Text in Form von HTML erstellt.

Das XML, das verwendet werden kann, ist wie folgt:

<Requirement>
<Credential>
<Type>nsg-custom-cred</Type>
<ID>passwd</ID>
</Credential>
<Label>
<Type>nsg-custom-label</Type>
</Label>
</Requirement>

<Requirement>: Auf der Anmeldeseite bereitgestellter Speicherplatz. Die Anmeldeinformationen füllen den Speicherplatz aus, und die anderen Teile leiten die Engine in die richtigen Informationen. Geben Sie in diesem Fall nsg-custom-cred ein. Dies ist als Klartext definiert und die Beschriftung wird für ihren Körper definiert. Die Anforderung XML wird mit dem JavaScript-Code gekoppelt, um die erforderlichen Ergebnisse zu erzielen.

// Custom Label Handler for Self Service Links
CTXS.ExtensionAPI.addCustomAuthLabelHandler({
getLabelTypeName: function () { return "nsg-custom-label"; },
getLabelTypeMarkup: function (requirements) {
return $("< Your HTML Code Here>");
},
// Instruction to parse the label as if it was a standard type
parseAsType: function () {
return "plain";
}
});
//Custom Credential Handler for Self Service Links
CTXS.ExtensionAPI.addCustomCredentialHandler({
getCredentialTypeName: function () { return "nsg-custom-cred"; },
getCredentialTypeMarkup: function (requirements) {
return $("<div/>");
},
});

Der XML-Teil gibt die Anmeldeseite an, was angezeigt werden soll, und der JavaScript-Code stellt den eigentlichen Text bereit. Der Anmeldeinformationshandler öffnet den Raum und die Beschriftung füllt den Raum aus. Da der gesamte Authentifizierungsdatenverkehr jetzt unsichtbar ist, um neu zu schreiben und zu beantworten, können Sie das Aussehen der Seite ändern. Konfiguration zum Anpassen von Anmeldebeschriftungen

  1. Erstellen und binden Sie ein Design basierend auf RFWeb.

    add vpn portaltheme RfWebUI_MOD -basetheme RfWebUI
    
    bind vpn vserver TESTAAA –portaltheme RfWebUI_MOD
    

    Der Pfad für die Dateien, die auf dem Thema basieren, ist im Verzeichnis verfügbar; /var/netscaler/logon/themes/rfwebui_mod

  2. Fügen Sie das folgende Snippet am Ende der Datei script.js hinzu:

    Hinweis: Wenn die vorherigen Zeilen nicht in die richtige Datei einbezogen werden oder fehlende JavaScript-Funktionen enthalten sind, wird das Laden des XML verhindert. Der Fehler kann nur in der Developer Console des Browsers mit folgendem Text angezeigt werden: Undefined Type nsg-custom-cred.

    // Custom Label Handler for Self Service Links
    CTXS.ExtensionAPI.addCustomAuthLabelHandler({
    getLabelTypeName: function () { return "nsg-custom-label"; },
    getLabelTypeMarkup: function (requirements) {
    return $("<a href="https://identity.test.com/identity/faces/register" style="font-size: 16px;" style="text-align: center;">Self Registration</a><br><a href="https://identity.test.com/identity/faces/forgotpassword" style="font-size: 16px;" style="text-align: center;">Forgot Password</a><br><a href="https://identity.test.com/identity/faces/forgotuserlogin" style="font-size: 16px;" style="text-align: center;">Forgot User Login</a>");
    },
    // Instruction to parse the label as if it was a standard type
    parseAsType: function () {
    return "plain";
    }
    });
    //Custom Credential Handler for Self Service Links
    CTXS.ExtensionAPI.addCustomCredentialHandler({
    getCredentialTypeName: function () { return "nsg-custom-cred"; },
    getCredentialTypeMarkup: function (requirements) {
    return $("<div/>");
    },
    });
    

In diesem Beispiel verwendete Anmeldeschema

<?xml version="1.0" encoding="utf-8"?>
<AuthenticateResponse xmlns="http://citrix.com/authentication/response/1">
<Status>success</Status>
<Result>more-info</Result>
<StateContext/>
<AuthenticationRequirements>
<PostBack>/nf/auth/doAuthentication.do</PostBack>
<CancelPostBack>/Citrix/Authentication/ExplicitForms/CancelAuthenticate</CancelPostBack>
<CancelButtonText>Cancel</CancelButtonText>
<Requirements>
<Requirement>
<Credential>
<ID>login</ID>
<SaveID>Username</SaveID>
<Type>username</Type>
</Credential>
<Label>
<Text>User name</Text>
<Type>plain</Type>
</Label>
<Input>
<AssistiveText>Please supply either domain\username or user@fully.qualified.domain</AssistiveText>
<Text>
<Secret>false</Secret>
<ReadOnly>false</ReadOnly>
<InitialValue></InitialValue>
<Constraint>.+</Constraint>
</Text>
</Input>
</Requirement>
<Requirement>
<Credential>
<ID>passwd</ID>
<SaveID>Password</SaveID>
<Type>password</Type>
</Credential>
<Label>
<Text>Password:</Text>
<Type>plain</Type>
</Label>
<Input>
<Text>
<Secret>true</Secret>
<ReadOnly>false</ReadOnly>
<InitialValue/>
<Constraint>.+</Constraint>
</Text>
</Input>
</Requirement>
<Requirement>
<Credential>
<Type>nsg-custom-cred</Type>
<ID>passwd</ID>
</Credential>
<Label>
<Type>nsg-custom-label</Type>
</Label>
</Requirement>
<Requirement>
<Credential>
<ID>loginBtn</ID>
<Type>none</Type>
</Credential>
<Label>
<Type>none</Type>
</Label>
<Input>
<Button>Please Log On</Button>
</Input>
</Requirement>
</Requirements>
</AuthenticationRequirements>
</AuthenticateResponse>

Führen Sie die folgenden Befehle aus, um benutzerdefinierte Schema in config zu laden.

add authentication loginSchema custom -authenticationSchema custom.xml

add authentication loginSchemaPolicy custom -rule true -action custom

bind authentication vserver AAATEST -policy custom -priority 100 -gotoPriorityExpression END

Die folgende Abbildung zeigt die Anmeldeseite, die mit dieser Konfiguration gerendert wird.

Lokalisiertes Bild

Anpassen der Benutzeroberfläche für die Anzeige von Bildern

nFactor ermöglicht eine individuelle Anzeige unter Verwendung von Loginschema-Dateien. Möglicherweise sind weitere Anpassungen erforderlich, die von den integrierten Loginschemadateien angeboten werden. Beispiel: Anzeigen eines Hyperlinks oder Schreiben einer benutzerdefinierten Logik in der Benutzeroberfläche. Diese können mit benutzerdefinierten Anmeldeinformationen erreicht werden, die aus der Loginschema-Erweiterung und der entsprechenden Javascript-Datei bestehen.

Für die Anpassung der Benutzeroberfläche zum Anzeigen von Images wird ein Bereitstellungsfluss in der Integration Citrix ADC-Swivel als Beispiel verwendet.

Es gibt zwei Faktoren in diesem Fluss.

  • Erster Faktor: Überprüft die AD-Anmeldeinformationen des Benutzers.
  • Zweiter Faktor: Auffordert zur Benutzeranmeldung basierend auf der Gruppenmitgliedschaft.

Lokalisiertes Bild

In diesem Flow durchlaufen alle Benutzer den ersten Faktor. Vor dem zweiten Faktor gibt es einen Pseudofaktor, um zu überprüfen, ob einige Benutzer vom Schwenkfaktor weggelassen werden können. Wenn der Benutzer Schwenkfaktor benötigt, werden ein Bild und ein Textfeld angezeigt, um Code einzugeben.

Lösung

Die Lösung zum Anpassen der Benutzeroberfläche zum Anzeigen von Bildern enthält zwei Teile;

  • Loginschema-Erweiterung.
  • Benutzerdefiniertes Skript zum Verarbeiten der Loginschema-Erweiterung.

Loginschema-Erweiterung

Um das Rendering von Formularen zu steuern, wird eine benutzerdefinierte ‘ID’ /’ Anmeldeinformationen ‘in das Loginschema injiziert. Dies kann durch Wiederverwendung vorhandener Schema und Änderung gemäß der Anforderung erfolgen.

In diesem Beispiel wird ein Loginschema mit nur einem Textfeld (z. B. /nsconfig/loginschema/loginschema/onlyPassword.xml) berücksichtigt. Das folgende Snippet wird dem Loginschema hinzugefügt.

<Requirement><Credential><ID>swivel_cred</ID><Type>swivel_cred</Type><Input><Text><Hidden>true</Hidden><InitialValue>${http.req.user.name}</InitialValue></Text></Input></Credential></Requirement>

Im Snippet wird swivel_cred als Typ der Anmeldeinformationen angegeben. Da dies nicht als integrierte Anmeldeinformationen erkannt wird, sucht die Benutzeroberfläche nach einem Handler für diesen Typ und ruft sie auf, falls vorhanden.Für diese Anmeldeinformationen wird ein Anfangswert gesendet, der ein Ausdruck ist, den Citrix ADC dynamisch ausfüllt. In diesem Beispiel ist es der Name des Benutzers, der verwendet wird, um den Swivel Server über den Benutzernamen zu benachrichtigen. Es wird möglicherweise nicht ständig benötigt, oder es kann mit einigen anderen Daten erweitert werden. Diese Angaben müssen nach Bedarf hinzugefügt werden.

Javascript zum Behandeln benutzerdefinierter Anmeldeinformationen

Wenn die Benutzeroberfläche eine benutzerdefinierte Anmeldeinformationen findet, sucht sie nach einem Handler. Alle benutzerdefinierten Handler werden in /var/netscaler/logon/logonpoint/custom/script.js für das Standardportdesign geschrieben. Für benutzerdefinierte Portaldesigns kann script.js im Verzeichnis gefunden werden/var/netscaler/logon/themes/<custom_theme>/.

Das folgende Skript wird hinzugefügt, um Markups für benutzerdefinierte Anmeldeinformationen zu rendern.

CTXS.ExtensionAPI.addCustomCredentialHandler({
    // The name of the credential, must match the type returned by the server
    getCredentialTypeName: function () { return "swivel_cred"; },
    // Generate HTML for the custom credential
    getCredentialTypeMarkup: function (requirements) {
        var div = $("<div></div>");
        var image = $("<img/>");
        var username = requirements.input.text.initialValue; //Get the secret from the response
        image.attr({
            "style" : "width:200px;height:200px;",
            "id" : "qrcodeimg",
            "src" : "https://myswivelserver.citrix.com:8443/pinsafe/SCImage?username=" + username
        });
        div.append(image);
        return div;
    }
});

Dieses Snippet dient der Verarbeitung des Markups für ‘swivel_cred’. Der hervorgehobene Anmeldeinformationsname muss mit dem zuvor in der Loginschemaerweiterung angegebenen ‘Typ’ übereinstimmen. Um Markup zu generieren, muss ein Bild hinzugefügt werden, dessen Quelle auf Swivel Server verweist. Sobald dies erledigt ist, lädt die Benutzeroberfläche das Bild vom angegebenen Speicherort. Da dieses Anmeldeschema auch über ein Textfeld verfügt, rendert die Benutzeroberfläche dieses Textfeld.

Hinweis: Der Administrator kann den Stil des Bildelements ändern, um die Größe des Bildes zu ändern. Derzeit ist es für 200x200 Pixel konfiguriert.

Konfiguration zum Anpassen der Benutzeroberfläche für die Anzeige von Bildern

nFactor Konfiguration ist besser von unten nach oben konstruiert, das ist der letzte Faktor zuerst, da Sie versuchen, ‘NextFactor’ für die vorherigen Faktoren anzugeben, den Namen des nachfolgenden Faktors benötigen.

Schwenkfaktor-Konfiguration:

add loginschema swivel_image –authenticationSchema /nsconfig/loginschema/SwivelImage.xml

add authentication policylabel SwivelFactor –loginSchema swivel_image

bind authentication policylabel SwivelFactor –policy <policy-to-check-swivel-image> -priority 10

Hinweis: Laden Sie SwivelImage.xml aus dem im Beispiel verwendeten Loginschema herunter.

Pseudofaktor für Gruppenprüfungskonfiguration:

add authentication policylabel GroupCheckFactor

add authentication policy contractors_auth_policy –rule ‘http.req.user.is_member_of(“contractors”)’ –action NO_AUTHN

add authentication policy not_contractors _auth_policy–rule true –action NO_AUTHN

bind authentication policylabel GroupCheckFactor –policy contractors_auth_policy –pri 10 –nextFactor SwivelFactor

bind authentication policylabel GroupCheckFactor –policy not_contractors_auth_policy –pri 20

Erster Faktor für die Active Directory Anmeldung:

add ldapAction <>

add authentication policy user_login_auth_policy –rule true –action <>

bind authentication vserver <> -policy user_login_auth_policy –pri 10 –nextFactor GroupCheckFactor

In der Konfiguration werden drei Faktoren angegeben, von denen einer implizit/pseudo ist.

In diesem Beispiel verwendete Anmeldeschema

Im Folgenden finden Sie ein Beispielschema mit Swivel-Anmeldeinformationen und einem Textfeld.

Hinweis: Beim Kopieren von Daten für den Webbrowser werden Anführungszeichen möglicherweise anders angezeigt. Kopieren Sie Daten in Editoren wie Notepad, bevor Sie sie in Dateien speichern.

<?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>swivel_cred</ID><Type>swivel_cred</Type><Input><Text><Hidden>true</Hidden><InitialValue>${http.req.user.name}</InitialValue></Text></Input></Credential></Requirement>
<Requirement><Credential><ID>passwd</ID><SaveID>ExplicitForms-Password</SaveID><Type>password</Type></Credential><Label><Text>Password:</Text><Type>plain</Type></Label><Input><Text><Secret>true</Secret><ReadOnly>false</ReadOnly><InitialValue></InitialValue><Constraint>.+</Constraint></Text></Input></Requirement>
<Requirement><Credential><Type>none</Type></Credential><Label><Text>Hello ${http.req.user.name}, Please enter passcode from above image.</Text><Type>confirmation</Type></Label><Input /></Requirement>
<Requirement><Credential><ID>saveCredentials</ID><Type>savecredentials</Type></Credential><Label><Text>Remember my password</Text><Type>plain</Type></Label><Input><CheckBox><InitialValue>false</InitialValue></CheckBox></Input></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>

Ausgabe

Sobald die Konfiguration durchgeführt wurde, wird das folgende Bild angezeigt.

Lokalisiertes Bild

Hinweis: Bildhöhe und -platzierung können im JavaScript geändert werden.

Anpassen des Citrix ADC nFactor-Anmeldeformulars zum Ein- oder Ausblenden von Feldern

Die RFWeb-Benutzeroberfläche von Citrix Gateway ermöglicht eine Vielzahl von Anpassungen. Diese Funktion in Kombination mit dem nFactor-Authentifizierungsframework ermöglicht Kunden die Konfiguration komplexer Flows ohne Kompromisse bei bestehenden Workflows.

In diesem Beispiel stehen in der Liste Anmeldetyp zwei Authentifizierungsoptionen OAuth und LDAP zur Verfügung. Wenn das Formular zum ersten Mal geladen wird, werden Benutzernamen und Kennwortfelder (LDAP wird zuerst angezeigt) angezeigt. Wenn OAuth ausgewählt ist, werden alle Felder ausgeblendet, da OAuth die Verlagerung der Authentifizierung an einen Drittanbieterserver impliziert. Auf diese Weise kann der Administrator intuitive Workflows je nach Benutzerfreundlichkeit konfigurieren.

Hinweis:

  • Die Werte in der Liste Anmeldetyp können mit einfachen Änderungen an der Skriptdatei geändert werden.
  • In diesem Abschnitt wird nur der UI-Teil des Flows beschrieben. Die Laufzeitbehandlung der Authentifizierung liegt außerhalb des Geltungsbereichs dieses Artikels. Für die Authentifizierungskonfiguration wird empfohlen, sich in der nFactor-Dokumentation zu verweisen.

So passen Sie das nFactor-Anmeldeformular an

Anpassen des nFactor-Anmeldeformulars kann in zwei Teile unterteilt werden

  • Senden des rechten Loginschemas an die Benutzeroberfläche
  • Schreiben eines Handlers zum Interpretieren von Loginschema- und Benutzerauswahlen

Rechtes Loginschema an die Benutzeroberfläche senden

In diesem Beispiel wird ein einfacher Anspruch/Anforderung im Loginschema gesendet.

Dazu wird die Datei SingleAuth.xml geändert. SingleAuth.xml wird mit der Citrix ADC Firmware ausgeliefert und befindet sich im Verzeichnis /nsconfig/loginschema/loginSchema.

Schritte zum Senden von Loginschema:

  1. Melden Sie sich über SSH an und legen Sie sie in die Shell ab (Typ ‘shell’).

  2. Kopieren Sie SingleAuth.xml zur Änderung in eine andere Datei.

    Hinweis: Der Zielordner unterscheidet sich vom Standardordner für Citrix ADC Anmeldeschemas.

    cp /nsconfig/loginschema/loginschema/singleAuth.xml /nsconfig/loginschema/singleAuthDynamic.xml

  3. Fügen Sie den folgenden Anspruch zu SingleAuthDynamic.xml hinzu.

    <Requirement><Credential><ID>nsg_dropdown</ID><Type>nsg_dropdown</Type></Credential><Label><Text>Logon Type:</Text><Type>plain</Type></Label></Requirement>
    
  4. Konfigurieren Sie Citrix ADC, um dieses Anmeldeschema zu senden, um das erste Formular zu laden.

    add loginschema single_auth_dynamic –authenticationSchema SingleAuthDynamic.xml
    
    add loginschemaPolicy single_auth_dynamic –rule true –action single_auth_dynamic
    
    bind authentication vserver aaa_nfactor –policy single_auth_dynamic –pri 10
    

Skriptänderungen zum Laden von Formularen und Behandeln von Benutzerereignissen

Sie können das JavaScript ändern, mit dem der Administrator die Anzeige für das Anmeldeformular anpassen kann. In diesem Beispiel werden Benutzername und Kennwort angezeigt, wenn LDAP ausgewählt ist, und werden ausgeblendet, wenn OAuth ausgewählt ist. Der Administrator kann auch nur das Kennwort ausblenden. Administratoren müssen das folgende Snippet an script.js anhängen, das sich im Verzeichnis /var/netscaler/logon/logonPoint/custom befindet.

Hinweis: Da es sich bei diesem Verzeichnis um ein globales Verzeichnis handelt, erstellen Sie ein Portaldesign und bearbeiten Sie die Datei “script.js” in diesem Ordner unter"/var/netscaler/logon/themes/<THEME_NAME>".

CTXS.ExtensionAPI.addCustomCredentialHandler({
    // The name of the credential, must match the type returned by the server
    getCredentialTypeName: function () { return "nsg_dropdown"; },
    // Generate HTML for the custom credential
    getCredentialTypeMarkup: function (requirements) {
        var div = $("<div></div>");
        var select = $("<select name='nsg_dropdown'></select>").attr("id", "nsg_dropdown");

        var rsa = $("<option></option>").attr("selected", "selected").text("LDAP").val("LDAP");
        var OAuthID = $("<option></option>").text("OAuth").val("OAuth");
        select.append(rsa, OAuthID);

        select.change(function(e) {
            var value = $(this).val();
            var ldapPwd = $($(".credentialform").find(".CredentialTypepassword")[0]);
            var ldapUname = $($(".credentialform").find(".CredentialTypeusername"));
            if(value == "OAuth") {
                if (ldapPwd.length)
                        ldapPwd.hide();
                if (ldapUname.length)
                        ldapUname.hide();
            } else if(value == "LDAP") {
                if (ldapPwd.length)
                        ldapPwd.show();
                if (ldapUname.length)
                        ldapUname.show();
            }
        });
       div.append(select);
        return div;
    }
});

Anwendererfahrung

Wenn ein Endbenutzer die Anmeldeseite zum ersten Mal lädt, wird der folgende Bildschirm angezeigt.

Lokalisiertes Bild

Wenn OAuth unter Anmeldetyp ausgewählt ist, werden die Felder Benutzername und Kennwort ausgeblendet.

Lokalisiertes Bild

Wenn LDAP ausgewählt ist, werden Benutzername und Kennwort angezeigt. Auf diese Weise kann die Anmeldeseite basierend auf der Benutzerauswahl dynamisch geladen werden.

In diesem Beispiel verwendete Anmeldeschema

<?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>login</ID><SaveID>ExplicitForms-Username</SaveID><Type>username</Type></Credential><Label><Text>User name</Text><Type>plain</Type></Label><Input><AssistiveText>Please supply either domain\username or user@fully.qualified.domain</AssistiveText><Text><Secret>false</Secret><ReadOnly>false</ReadOnly><InitialValue></InitialValue><Constraint>.+</Constraint></Text></Input></Requirement>
<Requirement><Credential><ID>passwd</ID><SaveID>ExplicitForms-Password</SaveID><Type>password</Type></Credential><Label><Text>Password:</Text><Type>plain</Type></Label><Input><Text><Secret>true</Secret><ReadOnly>false</ReadOnly><InitialValue></InitialValue><Constraint>.+</Constraint></Text></Input></Requirement>
<Requirement><Credential><ID>nsg_dropdown</ID><Type>nsg_dropdown</Type></Credential><Label><Text>Logon Type:</Text><Type>plain</Type></Label></Requirement>
<Requirement><Credential><Type>none</Type></Credential><Label><Text>First factor</Text><Type>confirmation</Type></Label><Input /></Requirement>
<Requirement><Credential><ID>saveCredentials</ID><Type>savecredentials</Type></Credential><Label><Text>Remember my password</Text><Type>plain</Type></Label><Input><CheckBox><InitialValue>false</InitialValue></CheckBox></Input></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>

Wichtig: Weitere Informationen zu verschiedenen Themen im Zusammenhang mit nFactor finden Sie unter nFactor.