nFactor可扩展性
nFactor身份验证框架提供了添加自定义设置的灵活性,使登录界面更直观,实现了丰富的用户体验。可以添加自定义登录标签,自定义登录凭据,自定义UI显示等。
使用nFactor,每个因素都可以有自己的登录屏幕。在每个登录屏幕中,您都可以显示以前任何因素中的任何信息或其他因素中不可见的更多信息。例如,您的最后一个因素可能是一个信息性页面,用户可以在其中阅读说明并单击继续。
在nFactor之前,自定义登录页面受到限制,需要自定义设置和支持。可以替换tmindex.html或应用重写规则来更改其某些行为。但是,无法实现基础功能。
本主题将详细捕获下列与nFactor相关的自定义设置。
- 自定义登录标签
- 自定义UI以显示图像
- 自定义Citrix ADC nFactor登录表单
假设
您熟悉nFactor,壳牌命令、XML和文本编辑器。
必备条件
- 只有在Citrix ADC上配置了RfWeb UI主题(或基于主题)时,才可能实现本主题中描述的自定义设置。
- 身份验证策略必须绑定到身份验证、授权和审核虚拟服务器,否则流将无法按预期工作。有关详细信息,请参阅CTX224241。
- 您有以下项目与nFactor相关
- XML架构
- JavaScript
- 身份验证操作
- 身份验证虚拟服务器
- Citrix ADC版本11.1及更高版本
自定义登录标签
要自定义登录标签,您需要以下对象:
- 描述登录页面外观的XML架构。
- 包含用于更改呈现过程的JavaScript的script.js文件。
工作原理
JavaScript解析XML文件,将每个项目呈现在<规定>
标签中。每个元素对应的HTML表单中的一行。例如,登录字段占一行,密码字段占另一行,登录按钮也占一行。要引入新行,则必须使用店面SDK在XML架构文件中指定新行。店面SDK允许具有XML架构的登录页面使用<规定>
标记并在其上定义元素。这些元素允许使用JavaScript在该空间中引入任何所需的HTML元素。在这种情况下,将使用HTML格式的文本创建一行。
可以使用的XML如下:
nsg-custom-cred passwd
<规定>
:登录页面中提供的空间。凭据将填充该空间,其他部分则将引擎路由到正确的信息。在这种情况下,请键入nsg-custom-cred。这定义为纯文本,标签是为其正文定义的。要求XML与JavaScript代码配对以实现所需的结果。
//自定义标签处理程序自服务链接CTXS.ExtensionAPI。addCustomAuthLabelHandler({getLabelTypeName: function () {return "nsg-custom-label";}, getLabelTypeMarkup: function (requirements) {return $("< HTML Code Here>");}, //将标签解析为标准类型的指令parseAsType:} });//自定义证书处理程序的自助服务链接CTXS.ExtensionAPI。addCustomCredentialHandler({getCredentialTypeName: function () {return "nsg-custom-cred";}, getCredentialTypeMarkup:函数(需求){返回$("");}});<!--NeedCopy-->
XML部分指示登录页面要显示的内容,JavaScript代码提供实际的文本。凭据处理程序会打开空间,标签将填充该空间。由于所有身份验证流量现在对重写和响应程序都不可见,因此您可以更改页面的外观。用于自定义登录标签的配置
基于RfWeb创建和绑定主题。
add vpn portaltheme RfWebUI_MOD -basetheme rfweb bind vpn vserver TESTAAA -portaltheme RfWebUI_MOD
基于主题的文件的路径可在目录/var/netscaler/logon/themes/RfWebUI_MOD中找到
将以下代码段添加到script.js文件的末尾:
注意:如果无法在正确的文件中包含前面的行或错过包含任何JavaScript函数,则会导致XML无法加载。该错误只能在浏览器的开发人员控制台中显示,其中包含以下文本:“未定义类型nsg-custom-cred”(未定义的类型nsg-custom-cred)。
本示例中使用的Loginschema
<?xml version = " 1.0 " encoding = " utf - 8 " ?> success more-info /nf/auth/doAuthentication. info /nf/auth/doAuthentication. infodo /Citrix/Authentication/ExplicitForms/CancelAuthenticate Cancel login Username Username Type> Please supply either domain\username or user@fully.qualified.domain false false <约束>+ passwd Password /SaveID> Password Type> true false + nsg-custom-cred passwd loginBtn none authenticaterresponse >
执行以下命令将自定义架构加载到配置中。
add authentication loginSchema custom -authenticationSchema custom.xml add authentication loginschempolicy custom -rule true -action custom bind authentication vserver AAATEST -policy custom -priority 100 -gotoPriorityExpression END
下图显示了使用此配置呈现的登录页面。
自定义UI以显示图像
nFactor允许使用loginschema文件进行自定义显示。除了内置的loginschema文件提供的自定义设置外,可能还需要进一步的自定义。例如,在UI中显示超链接或编写自定义逻辑。这些可以使用由loginschema扩展和相应的javascript文件组成的“自定义凭据”来实现。
对于UI自定义以显示图像,将使用“Citrix ADC-Swivel”集成中的部署流作为示例。
此流中有两个因素。
- 第一个因素:检查用户的广告凭据。
- 第二个因素:根据组成员身份提示用户登录。
在此流中,所有用户都经历了第一个因素。在第二个因素之前,有一个伪因素可以检查是否能够从“旋转”因素中省略某些用户。如果用户需要“旋转”因素,则会显示图像和文本框以输入代码。
解决方案
自定义UI以显示图像的解决方案包含两个部分;
- loginschema扩展。
- 用于处理loginschema扩展的自定义脚本。
loginschema扩展
为了控制表单呈现,将自定义的“id”/“凭据”注入loginschema中。这可以通过重复使用现有架构并根据要求进行修改来完成。
在此示例中,假设只有一个文本字段(例如/ nsconfig loginschema / loginschema / OnlyPassword.xml)的loginschema。以下代码段将添加到loginschema中。
<规定> <凭证> < ID > swivel_cred ID < / > < >型swivel_cred < /类型> <输入> <文本> < >隐藏真正的隐藏< / > < InitialValue > $ {http.req.user.name} < / InitialValue > < /文本> < /输入> < /凭证> < /要求> < !——NeedCopy >
在该代码段中,“swivel_cred”被指定为凭据的“类型”。由于这不会被识别为内置“凭据”,因此UI会查找此类型的处理程序,如果存在,则进行调用。将为此凭据发送初始值,此凭据是Citrix ADC动态填充的表达式。在此示例中,它是用于通知旋转服务器用户名的用户名。可能不是任何时候都需要,也可以用其他一些数据对其进行增强。必须根据需要添加这些详细信息。
用于处理自定义凭据的JavaScript
当UI找到自定义凭据时,则会查找处理程序。所有自定义处理程序都写入默认门户主题的/var/netscaler/logon/LogonPoint/custom/script.js中。对于自定义门户主题,可以在目录/var/netscaler/logon/themes/ < custom_theme > /
中找到script.js。
添加了以下脚本来呈现自定义凭据的标记。
CTXS.ExtensionAPI。addCustomCredentialHandler({//证书的名称,必须匹配服务器返回的类型getCredentialTypeName: function () {return "swivel_cred";}, //生成自定义凭证的HTML getCredentialTypeMarkup: function (requirements) {var div = $("");Var image = $("
");var username = requirements.input.text.initialValue;//从响应图像中获取秘密。attr({"style": "width:200px;height:200px;", "id": "qrcodeimg", "src": "https://myswivelserver.citrix.com:8443/pinsafe/SCImage?username=" + username});div.append(图片);返回div;} });
此代码段用于处理“swivel_cre”的标记。突出显示的凭据名称必须与之前在loginschema扩展中指定的“类型”匹配。要生成标记,需要添加源指向旋转服务器的图像。完成此操作后,用户界面将从指定位置加载图像。因为此loginschema也有一个文本框,因此UI会呈现该文本框。
注意:管理员可以修改图像元素的“风格”来调整图像的大小。当前图像配置为200 x200型像素。
用于自定义UI以显示图像的配置
nFactor配置最好自下而上进行构建,即最后一个因素有限,因为当您尝试为以前的因素指定“nextFactor”时,需要后续因素的名称。
旋转因素配置:
add loginschema swivel_image -authenticationSchema /nsconfig/loginschema/SwivelImage.xml add authentication policylabel SwivelFactor -loginSchema swivel_image bind authentication policylabel SwivelFactor -policy -priority 10
注意:从示例中使用的loginschema下载SwivelImage.xml。
组检查配置的伪因素:
添加身份验证policylabel GroupCheckFactor添加身份验证策略contractors_auth_policy规则”http.req.user.is_member_of(“承包商”)“动作片NO_AUTHN添加身份验证策略not_contractors _auth_policy-rule真正动作片NO_AUTHN绑定验证policylabel GroupCheckFactor政策contractors_auth_policy pri 10 -nextFactorSwivelFactor绑定认证policylabel GroupCheckFactor -policy not_conttors_auth_policy -pri 20
Active Directory登录的第一个因素:
add ldapAction <> add authentication policy user_login_auth_policy -rule true -action <> bind authentication vserver <> -policy user_login_auth_policy -pri 10 -nextFactor GroupCheckFactor
在此配置中,指定了三个因素,其中一个是隐式因素/伪因素。
本示例中使用的Loginschema
下面是带旋转凭据和文本框的示例架构。
注意:复制网页浏览器的数据时,引号可能会以不同的方式显示。请先在记事本等编辑器中复制数据,然后再将其保存到文件。
<?xml version = " 1.0 " encoding = " utf - 8 " ?>< authenticaterresponse xmlns="//m.giftsix.com/authentication/response/1"> success more-info /nf/auth/doAuthentication. >< Status>success more-info /nf/auth/doAuthentication。< /回发> < CancelPostBack > / nf /认证/ doLogoff。do Cancel swivel_cred swivel_cred true ${http.req.user.name} <规定> <凭证> < ID > passwd < / ID > < SaveID > ExplicitForms-Password < / SaveID > <类型>密码< /类型> < /凭证> <标记> < >文本密码:文本< / > < >型平原< /类型> < /标签> <输入> <文本> <秘密>对<秘密> / <只读的>假< /只读的> < InitialValue > < / InitialValue > <约束>。+ none authenticaterresponse >< !——NeedCopy >
输出
执行配置后,将显示以下图像。
注意:可以在JavaScript中更改图像高度和放置位置。
自定义Citrix ADC nFactor登录表单以显示或隐藏字段
Citrix网关的RfWeb UI允许进行各种自定义。与nFactor身份验证框架结合使用时,客户可以在不影响现有工作流的情况下配置复杂流。
在此示例中,“登录类型”(登录类型)列表中有两个身份验证选项OAuth和LDAP。首次加载表单时,将显示用户名和密码字段(首先显示LDAP)。如果选择了 OAuth,则所有字段都将隐藏,因为 OAuth 意味着将身份验证卸载到第三方服务器。这样,管理员可以根据用户是否方便来配置直观的工作流。
注意:
- 只需简单修改脚本文件即可修改“登录类型”(登录类型)列表中的值。
- 本部分仅介绍流的UI部分。身份验证的运行时处理不在本文的讨论范围之内。建议用户参阅nFactor文档了解身份验证配置。
如何自定义nFactor登录表单
自定义nFactor登录表单可分为两个部分
- 将正确的loginschema发送到UI
- 编写处理程序以解释loginschema和用户选择对象
将正确的loginschema发送到UI
在此示例中,在loginschema中发送了一个简单的声明/要求。
为,此修改了SingleAuth.xml文件.SingleAuth.xml随Citrix ADC固件一起提供,可在/ / nsconfig / loginschema loginschema目录中找到。
发送loginschema的步骤:
通过SSH登录并放置到shell(键入壳)。
将SingleAuth.xml复制到另一个文件进行修改。
注意:目标文件夹与默认的Citrix ADC loginschemas文件夹不同。
cp / nsconfig / loginschema loginschema / SingleAuth.xml nsconfig / loginschema / SingleAuthDynamic.xml
将以下声明添加到SingleAuthDynamic.xml。
<规定> <凭证> < ID > nsg_dropdown ID < / > < >型nsg_dropdown < /类型> < /凭证> <标签> <文本>登录类型:文本< / > < >型平原< /类型> < /标签> < /要求> < !——NeedCopy >
将Citrix ADC配置为发送此loginschema以加载第一个表单。
add loginschema single_auth_dynamic -authenticationSchema SingleAuthDynamic.xml add loginschempolicy single_auth_dynamic -rule true -action single_auth_dynamic绑定认证vserver aaa_nfactor -policy single_auth_dynamic -pri 10
脚本发生变化以加载表单和处理用户事件
您可以修改JavaScript,使管理员能够自定义登录表单的显示。在此示例中,如果选择了LDAP,则会显示用户名和密码字段,如果选择了OAuth,则将隐藏用户名和密码字段。管理员也可以只隐藏密码。管理员必须将以下代码段附加到“/ var / netscaler /登录/ LogonPoint /定制”目录下的“script.js”中。
注意:由于此目录是全局目录,因此,请创建一个门户主题并在该文件夹中编辑“script.js”文件,位置为" / var / netscaler /登录/主题/ < THEME_NAME >”
。
CTXS.ExtensionAPI。addCustomCredentialHandler({//证书的名称,必须匹配服务器返回的类型getCredentialTypeName: function () {return "nsg_dropdown";}, //生成自定义凭证的HTML getCredentialTypeMarkup: function (requirements) {var div = $("");Var select = $("")。attr(“id”、“nsg_dropdown”);Var rsa = $("")。attr(“选择”,“选择”)。text (LDAP) .val (LDAP);var OAuthID = $(" <选项> < /选项>”)。text (OAuth) .val(“OAuth”);选择。追加(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; } });
最终用户体验
最终用户首次加载登录页面时,将显示以下屏幕。
如果在登录类型(登录类型)中选择OAuth,用户名和密码字段将隐藏。
如果选择LDAP,则将显示用户名和密码。这样,可以根据用户选择动态加载登录页面。
本示例中使用的Loginschema
<?xml version = " 1.0 " encoding = " utf - 8 " ?>< authenticaterresponse xmlns="//m.giftsix.com/authentication/response/1"> success more-info /nf/auth/doAuthentication. >< Status>success more-info /nf/auth/doAuthentication。< /回发> < CancelPostBack > / nf /认证/ doLogoff。取消做< / CancelPostBack > < CancelButtonText > < / CancelButtonText > <规定> <规定> <凭证> < ID >登录< / ID > < SaveID > ExplicitForms-Username < / SaveID > <类型>用户名< /类型> < /凭证> <标签> <文本>用户名文本< / > < >型平原< /类型> < /标签> <输入> < AssistiveText >域\用户名或供应吗user@fully.qualified.domain < / AssistiveText > <文本> <秘密>假<秘密> / <只读的>假< /只读的> < InitialValue > < / InitialValue > <约束>。+ < /约束> < /文本> < /输入> < /要求><规定> <凭证> < ID > passwd < / ID > < SaveID > ExplicitForms-Password < / SaveID > <类型>密码< /类型> < /凭证> <标记> < >文本密码:文本< / > < >型平原< /类型> < /标签> <输入> <文本> <秘密>对<秘密> / <只读的>假< /只读的> < InitialValue > < / InitialValue > <约束>。+ < /约束> < /文本> < /输入> < /要求> <规定> <凭证> < ID > nsg_dropdown ID < / > < >型nsg_dropdown < /类型> < /凭证> <标签> <文本>登录类型:文本< / > < >型平原< /类型> < /标签> < /要求> <规定> <凭证> <类型>没有< /类型> < /凭证> <标记> <文本>第一因素> < /文本类型> <确认> < /类型标签< / > <输入/ > < /要求><规定> <凭证> < ID > saveCredentials ID < / > < >型saveCredentials < /类型> < /凭证> <标签> <文本>记得我的密码文本< / > < >型平原< /类型> < /标签> <输入> <复选框> < InitialValue >假< / InitialValue > < /复选框> < /输入> < /要求>loginBtn none none authenticaterresponse >< !——NeedCopy >
重要提示:有关各种nFactor相关主题的更多详细信息,请参阅nFactor。