ADC

设备注册的推荐本机 OTP 配置

本节介绍在以下情况下您可以为设备注册执行的本机 OTP 配置:

  • 正在注册设备的新用户
  • 丢失设备的注册用户

必备条件

使用 NetScaler CLI 配置身份验证虚拟服务器。

add authentication vserver authvs_otp SSL 1.2.3.5 443

bind authentication vserver authvs_otp -portaltheme RFWebUI

bind ssl vserver authvs_otp -certkeyname otpauthcert
<!--NeedCopy-->

用于增强 OTP 安全性的本机 OTP 配置

  • 方法 1:客户端 IP 地址限制

    在这种方法中,使用客户端源 IP 地址评估用户访问权限的有效性。用户必须在办公室网络或分支机构中才能注册或删除其设备。用户从办公室子网之外的设备注册请求未获批准。

    设备注册登录页面

  • 方法 2:基于用户组成员资格的限制

    在这种方法中,用户访问权限的有效性是根据他们在 AD 组中的成员资格来评估的。每当需要新注册或用户丢失移动设备时,就会将用户添加到特殊组中。

    设备注册登录页面

  • 方法 3:在 LDAP 身份验证的同时引入其他因素

    在这种方法中,还为身份验证配置了额外的验证因素。在此示例中,使用 LDAP 和 RADIUS 身份验证方法进行配置。

    设备注册登录页面

方法 1:客户端 IP 地址限制

  1. 配置第一个因素。第一个因素决定客户端设备是访问设备注册页面还是尝试本机 OTP 多因素登录。

    • 为设备注册请求创建身份验证策略。

    add authentication Policy check_request_for_manageotp -rule "HTTP.REQ.COOKIE.VALUE(\"NSC_TASS\").EQ(\"manageotp\")" -action NO_AUTHN

  2. 这个因素决定了访问权限是否合法。NetScaler 会验证客户端 IP 地址是否在配置的公司网络 IP 地址范围内。

    • 为设备注册流程创建登录架构。

      add authentication loginSchema lschema_single_manage_otp -authenticationSchema "/nsconfig/loginschema/LoginSchema/SingleAuthManageOTP.xml"

    • 为第二个因素创建设备注册流策略标签。

      add authentication policylabel otp_manage_flow -loginSchema lschema_single_manage_otp

    • 为用户验证创建 LDAP 操作。

      add authentication ldapAction ldap_otp_action_for_manageotp -serverIP <LDAPServerIP> -ldapBase <LdapBase> -ldapBindDn <LdapAdminUser> -ldapBindDnPassword <LdapAdminPassword> -ldapLoginName samAccountName -groupAttrName memberOF -subAttributeName CN

    • 为用户验证创建身份验证策略。该规则基于最终用户的办公网络。

      add authentication Policy ldap_otp_policy_for_manageotp -rule "CLIENT.IP.SRC.APPLY_MASK(255.255.255.0).EQ(10.140.200.0)" -action ldap_otp_action_for_manageotp

  3. 配置第三个因素。根据前一因素的策略评估,用户要么被允许访问设备注册页面,要么被拒绝访问并显示相应的错误消息。

    • 为无效的用户访问权限创建身份验证策略。

      add authentication Policy noauthnotallowed -rule true -action NO_AUTHN

    • 为无效的用户访问权限创建登录架构。您可以根据显示相关消息的要求自定义登录架构。

      add authentication loginSchema notallowed -authenticationSchema "/nsconfig/loginschema/LoginSchema/InvalidFlow.xml"

    • 为无效的用户访问权限创建策略标签并添加登录架构。

      add authentication policylabel notallowed -loginSchema notallowed

    • 将策略绑定到 otp_manage_flow 策略标签以完成无效的用户访问流程。

      bind authentication policylabel otp_manage_flow -policyName noauthnotallowed -priority 1000 -gotoPriorityExpression NEXT -nextFactor notallowed

  4. 配置第四个因素。在这个因素中,用户可以在设备注册页面中添加或删除他们的 OTP 设备。

    • 为有效的用户访问权限创建 LDAP 操作,用户可以在此因素中注册设备。

      add authentication ldapAction ldap_otp_register_action -serverIP <LDAPServerIP> -ldapBase <LdapBase> -ldapBindDn <LdapAdminUser> -ldapBindDnPassword <LdapAdminPassword> -ldapLoginName samAccountName -authentication DISABLED -OTPSecret userParameters

    • 为有效的用户访问权限创建 LDAP 策略。

      add authentication Policy ldap_otp_register_policy -rule true -action ldap_otp_register_action

    • 为有效的用户访问权限添加身份验证策略标签。

       add authentication loginSchema lschema_noschema -authenticationSchema noschema
      
       add authentication policylabel otp_manage_register_factor -loginSchema lschema_noschema
       <!--NeedCopy-->
      
    • 将 LDAP 策略绑定到标签以获得有效的用户访问权限。

      bind authentication policylabel otp_manage_register_factor -policyNamel ldap_otp_register_policy -priority 10

    • 将策略绑定到前一个因素。

      bind authentication policylabel otp_manage_flow -policyName ldap_otp_policy_for_manageotp -priority 1 -gotoPriorityExpression NEXT -nextFactor otp_manage_register_factor

  5. 将设备注册流程绑定到身份验证虚拟服务器以完成流程。

    bind authentication vserver authvs_otp -policy check_request_for_manageotp -priority 10 -nextFactor otp_manage_flow -gotoPriorityExpression NEXT

示例:

  • 用户从办公网络外部访问设备注册页面,因此拒绝访问。

    设备注册登录页面

    设备注册页面访问被拒绝

  • 用户从办公网络访问设备注册页面,因此允许访问。

    设备注册登录页面

    设备注册登录页面

使用以下登录架构显示相应的错误消息:

  • InvalidFlow.xml

     <AuthenticateResponse
     xmlns="http://citrix.com/authentication/response/1">
     <Status>success</Status>
     <Result>more-info</Result>
     <StateContext/>
     <AuthenticationRequirements>
         <PostBack>/nf/auth/doAuthentication.do</PostBack>
         <CancelPostBack>/nf/auth/doLogoff.do</CancelPostBack>
         <CancelButtonText>Cancel</CancelButtonText>
         <Requirements>
             <Req<AuthenticateResponse
     xmlns="http://citrix.com/authentication/response/1">
     <Status>success</Status>
     <Result>more-info</Result>
     <StateContext/>
     <AuthenticationRequirements>
         <PostBack>/nf/auth/doAuthentication.do</PostBack>
         <CancelPostBack>/nf/auth/doLogoff.do</CancelPostBack>
         <CancelButtonText>Cancel</CancelButtonText>
         <Requirements>
             <Requirements>
                 <Requirement>
                     <Credential>
                         <Type>none</Type>
                     </Credential>
                     <Label>  
                         <Text>You are not allowed to access this application, Please close the browser</Text>
                         <Type>error</Type>
                     </Label>
                     <Input/>
                 </Requirement>
                 <Requirement>
                     <Credential>
                         <ID>error_okBtn</ID>
                         <Type>error_okBtn</Type>
                     </Credential>
                     <Label>  
                         <Type>none</Type>
                     </Label>
                 </Requirement>
             </Requirements>
         </Requirements>
     </AuthenticationRequirements>
     </AuthenticateResponse>
     <!--NeedCopy-->
    

方法 2:基于用户组成员资格的限制

  1. 配置第一个因素。该因素决定了客户端设备是访问设备注册页面还是尝试本机 OTP 多因素登录。

    • 为设备注册请求配置身份验证策略。

      add authentication Policy check_request_for_manageotp -rule "HTTP.REQ.COOKIE.VALUE(\"NSC_TASS\").EQ(\"manageotp\")" -action NO_AUTHN

  2. 配置第二个因素。这个因素决定了访问权限是否合法。NetScaler 从 LDAP 服务器获取组信息,并验证用户是否属于为设备注册配置的特定组。在以下示例中,使用了“allowmanageotp”组。

    • 为设备注册流程创建登录架构。

      add authentication loginSchema lschema_single_manage_otp -authenticationSchema "/nsconfig/loginschema/LoginSchema/SingleAuthManageOTP.xml"

    • 为第二个因素创建设备注册流策略标签。

      add authentication policylabel otp_manage_flow -loginSchema lschema_single_manage_otp

    • 为用户验证创建 LDAP 操作。

      add authentication ldapAction ldap_otp_action_for_manageotp -serverIP <LDAPServerIP> -ldapBase <LdapBase> -ldapBindDn <LdapAdminUser> -ldapBindDnPassword <LdapAdminPassword> -ldapLoginName samAccountName -groupAttrName memberOF -subAttributeName CN

    • 为用户验证创建身份验证策略。该规则基于最终用户的办公网络。

      add authentication Policy ldap_otp_policy_for_manageotp -rule "AAA.USER.GROUPS.CONTAINS(\"allowedmanageotp\")" -action ldap_otp_action_for_manageotp

  3. 配置第三个因素。根据先前因素的策略评估,NetScaler 根据 LDAP 服务器的响应来验证组成员资格。如果找到有效的组成员资格,则允许用户访问设备注册页面,或被拒绝访问并显示相应的错误消息。

    • 为无效的用户访问权限创建身份验证策略。

      add authentication Policy noauthnotallowed -rule true -action NO_AUTHN

    • 为无效的用户访问权限创建登录架构。您可以根据显示相关消息的要求自定义登录架构。

      add authentication loginSchema notallowed -authenticationSchema "/nsconfig/loginschema/LoginSchema/InvalidFlow.xml"

    • 为无效的用户访问权限创建策略标签并添加登录架构。

      add authentication policylabel notallowed -loginSchema notallowed

    • 将策略绑定到 otp_manage_flow 策略标签以完成无效的用户访问流程。

      bind authentication policylabel otp_manage_flow -policyName noauthnotallowed -priority 1000 -gotoPriorityExpression NEXT -nextFactor notallowed

  4. 配置第四个因素。该因素决定了用户可以在设备注册页面上的何处添加或删除其 OTP 设备。根据对先前因素的策略评估,实际的用户设备注册发生在该因素中。

    • 为有效的用户访问权限创建 LDAP 操作。用户使用此因素注册他们的设备。

      add authentication ldapAction ldap_otp_register_action -serverIP <LDAPServerIP> -ldapBase <LdapBase> -ldapBindDn <LdapAdminUser> -ldapBindDnPassword <LdapAdminPassword> -ldapLoginName samAccountName -authentication DISABLED -OTPSecret userParameters

    • 为有效的用户访问权限创建 LDAP 策略。

      add authentication Policy ldap_otp_register_policy -rule true -action ldap_otp_register_action

    • 为有效的用户访问权限添加身份验证策略标签。

       add authentication loginSchema lschema_noschema -authenticationSchema noschema
      
       add authentication policylabel otp_manage_register_factor -loginSchema lschema_noschema
       <!--NeedCopy-->
      
    • 将 LDAP 策略绑定到策略标签以获得有效的用户访问权限。

      bind authentication policylabel otp_manage_register_factor -policyNamel ldap_otp_register_policy -priority 10

    • 将策略绑定到前一个因素。

      bind authentication policylabel otp_manage_flow -policyName ldap_otp_policy_for_manageotp -priority 1 -gotoPriorityExpression NEXT -nextFactor otp_manage_register_factor

    • 将设备注册流程绑定到身份验证虚拟服务器以完成整个流程。

      bind authentication vserver authvs_otp -policy check_request_for_manageotp -priority 10 -nextFactor otp_manage_flow -gotoPriorityExpression NEXT

示例:

不在允许的设备注册组中的用户尝试通过办公网络访问设备注册页面。用户被拒绝访问门户。

有关用于此配置的登录架构的详细信息,请参阅方法 1:客户端 IP 地址限制

设备注册页面

设备注册页面被拒绝访问

方法 3:在 LDAP 身份验证的同时引入其他因素

  1. 配置第一个因素。该因素决定用户是访问设备注册页面还是尝试本地 OTP 多因素登录。

    • 设备注册请求的身份验证策略。

      add authentication Policy check_request_for_manageotp -rule "HTTP.REQ.COOKIE.VALUE(\"NSC_TASS\").EQ(\"manageotp\")" -action NO_AUTH

  2. 配置第二个因素。在这个因素中,NetScaler 会验证客户端 IP 地址是否属于办公网络。

    在本示例中,使用了 DualAuthManageOTP.xml 登录架构。此登录架构要求用户提供 LDAP 和 RADIUS 证书。

    • 为设备注册流程创建登录架构。
    `add authentication loginSchema dualauth_manageOTP -authenticationSchema "/nsconfig/loginschema/LoginSchema/DualAuthManageOTP.xml"`
    
    • 为设备注册流程添加策略标签。

      add authentication policylabel otp_manage_flow -loginSchema dualauth_manageOTP

    • 为用户验证添加 LDAP 身份验证操作。

      add authentication ldapAction ldap_otp_action_for_manageotp -serverIP <LDAPServerIP> -ldapBase <LdapBase> -ldapBindDn <LdapAdminUser> -ldapBindDnPassword <LdapAdminPassword> -ldapLoginName samAccountName

    • 为用户验证添加 LDAP 身份验证策略。

      add authentication Policy ldap_pol_for_manageOTP -rule true -action ldap_action_for_manageOTP

  3. 配置第三个因素,即 LDAP 之后的另一个因素,以进一步安全地访问设备注册页面。在此因素中,添加了 RADIUS 策略以验证用户在 RADIUS 服务器上的身份。如果用户的客户端 IP 地址与办公室子网范围相匹配,则允许用户访问设备注册页面。否则,用户将被拒绝访问,并显示相应的错误消息。根据对先前因素的策略评估,实际的用户设备注册发生在该因素中。

    • 添加 noschema 登录架构。

      add authentication loginSchema lschema_noschema -authenticationSchema noschema

    • 为 RADIUS 身份验证添加策略标签。

      add authentication policylabel radius_label_for_mangeOTP -loginSchema lschema_noschema

    • 为 RADIUS 身份验证添加身份验证策略。

      add authentication Policy rad_pol_for_manageOTP -rule true -action rad_act_for_manageOTP

    • 为 RADIUS 身份验证添加身份验证操作。

      add authentication radiusAction rad_act_for_manageOTP -serverIP <RADIUS Server IP> -radKey <RADIUSKEY>

    • 将 RADIUS 因素绑定到先前的策略标签。

      bind authentication policylabel otp_manage_flow -policyName ldap_pol_for_manageOTP -priority 10 -gotoPriorityExpression NEXT -nextFactor radius_label_for_mangeOTP

  4. 配置第四个因素。这个因素是用户可以在设备注册页面上添加或删除他们的 OTP 设备的地方。

    • 为设备注册添加政策标签。

      add authentication policylabel ldap_label_for_mangeOTP_registration -loginSchema lschema_noschema

    • 为 OTP 设备注册添加身份验证 LDAP 操作。

      add authentication ldapAction ldap_action_for_manageOTP_registration -serverIP <LDAPServerIP> -ldapBase <LdapBase> -ldapBindDn <LdapAdminUser> -ldapBindDnPassword <LdapAdminPassword> -ldapLoginName samAccountName -authentication DISABLED -OTPSecret userParameters

    • 为 OTP 设备注册添加身份验证策略。

      add authentication Policy ldap_pol_for_manageOTP_registration -rule true -action ldap_action_for_manageOTP_registration

    • 将身份验证策略绑定到策略标签。

      bind authentication policylabel ldap_label_for_manageOTP_registration -policyName ldap_pol_for_manageOTP_registration -priority 10

    • 将策略标签绑定到前一个因素。

      bind authentication policylabel radius_label_for_mangeOTP -policyName rad_pol_for_manageOTP -priority 1 -gotoPriorityExpression NEXT -nextFactor ldap_label_for_mangeOTP_registration

  5. 通过将第一个因素绑定到身份验证虚拟服务器来完成 nFactor 流程。

    bind authentication vserver authvs_otp -policy check_OTP_manageRequest -priority 10 -nextFactor otp_manage_flow

示例:

  • 用户访问设备注册页面,系统会提示用户提供 LDAP 凭据和 RADIUS 密码。

    设备注册 LDAP 和 RADIUS

  • 用户提供必填字段,因此可以访问设备注册页面。

    设备注册登录页面

在此配置中使用以下登录架构,其中在基于 AD 的身份验证之后引入了其他身份验证方法:

  • DualAuthManageOTP.xml

     <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
     <AuthenticateResponse
     xmlns="http://citrix.com/authentication/response/1">
     <Status>success</Status>
     <Result>more-info</Result>
     <StateContext/>
     <AuthenticationRequirements>
         <PostBack>/nf/auth/doAuthentication.do</PostBack>
         <CancelPostBack>/nf/auth/doLogoff.do</CancelPostBack>
         <CancelButtonText>Cancel</CancelButtonText>
         <Requirements>
             <Requirement>
                 <Credential>
                     <Type>none</Type>
                 </Credential>
                 <Label>
                     <Text>dualauth_please_log_on</Text>
                     <Type>nsg-login-label</Type>
                 </Label>
                 <Input/>
             </Requirement>
             <Requirement>
                 <Credential>
                     <ID>login</ID>
                     <SaveID>login</SaveID>
                     <Type>username</Type>
                 </Credential>
                 <Label>
                     <Text>dualauth_user_name</Text>
                     <Type>nsg-login-label</Type>
                 </Label>
                 <Input>
                     <Text>
                         <ReadOnly>false</ReadOnly>
                         <InitialValue/>
                         <Constraint>.+</Constraint>
                     </Text>
                 </Input>
             </Requirement>
             <Requirement>
                 <Credential>
                     <ID>passwd</ID>
                     <SaveID>passwd</SaveID>
                     <Type>password</Type>
                 </Credential>
                 <Label>
                     <Text>dualauth_password</Text>
                     <Type>nsg-login-label</Type>
                 </Label>
                 <Input>
                     <Text>
                         <Secret>true</Secret>
                         <Constraint>.+</Constraint>
                     </Text>
                 </Input>
             </Requirement>
             <Requirement>
                 <Credential>
                     <ID>passwd1</ID>
                     <SaveID>passwd1</SaveID>
                     <Type>password</Type>
                 </Credential>
                 <Label>
                     <Text>Password1</Text>
                     <Type>nsg-login-label</Type>
                 </Label>
                 <Input>
                     <Text>
                         <Secret>true</Secret>
                         <Constraint>.+</Constraint>
                     </Text>
                 </Input>
             </Requirement>
             <Requirement>
                 <Credential>
                     <ID>otpmanage</ID>
                     <Type>otpmanage</Type>
                 </Credential>
                 <Input>
                     <Text>
                         <Secret>false</Secret>
                         <Hidden>true</Hidden>
                         <InitialValue>1</InitialValue>
                         <Constraint>.+</Constraint>
                     </Text>
                 </Input>
             </Requirement>
             <Requirement>
                 <Credential>
                     <ID>pushregister</ID>
                     <Type>nsg_registerpush</Type>
                 </Credential>
                 <Input>
                     <Text>
                         <Secret>false</Secret>
                         <Hidden>true</Hidden>
                         <InitialValue>1</InitialValue>
                         <Constraint>.+</Constraint>
                     </Text>
                 </Input>
             </Requirement>
             <Requirement>
                 <Credential>
                     <ID>otpregister</ID>
                     <Type>nsg_registerotp</Type>
                 </Credential>
                 <Input>
                     <Text>
                         <Secret>false</Secret>
                         <Hidden>true</Hidden>
                         <InitialValue>1</InitialValue>
                         <Constraint>.+</Constraint>
                     </Text>
                 </Input>
             </Requirement>
             <Requirement>
                 <Credential>
                     <ID>savecredentials</ID>
                     <SaveID/>
                     <Type>savecredentials</Type>
                 </Credential>
                 <Label>
                     <Text>dualauth_remember_my_credentials</Text>
                     <Type>nsg-login-label</Type>
                 </Label>
                 <Input>
                     <AssistiveText>dualauth_</AssistiveText>
                     <CheckBox>
                         <InitialValue>false</InitialValue>
                     </CheckBox>
                 </Input>
             </Requirement>
             <Requirement>
                 <Credential>
                     <ID>Logon</ID>
                     <Type>none</Type>
                 </Credential>
                 <Label>
                     <Type>none</Type>
                 </Label>
                 <Input>
                     <Button>dualauth_submit</Button>
                 </Input>
             </Requirement>
         </Requirements>
     </AuthenticationRequirements>
     </AuthenticateResponse>
     <!--NeedCopy-->
    

NetScaler 登录

要配置 NetScaler 登录流程,请执行以下操作:

  1. 配置第一个因素。这个因素决定了这是登录请求还是设备注册请求。

    • 为 OTP 登录流程添加身份验证策略。

      add authentication Policy otp_login_pol -rule true -action NO_AUTHN

  2. 配置第二个因素。在此因素中,添加了提示用户输入凭据(用户名、密码和 OTP 密码)的登录架构。为了验证用户身份,在此因素中添加了 LDAP 操作。

    • 添加登录架构以显示用户登录页面。

      add authentication loginSchema dualauth_login -authenticationSchema "LoginSchema/DualAuth.xml"

    • 为用户登录添加策略标签并附加登录架构。

      add authentication policylabel otp_login_flow -loginSchema dualauth_login

    • 为用户登录添加 LDAP 操作。

       add authentication ldapAction ldap_act_for_validation -serverIP <LDAPServerIP> -ldapBase <LdapBase> -ldapBindDn <LdapAdminUser> -ldapBindDnPassword <LdapAdminPassword> -ldapLoginName samAccountName -groupAttrName memberOF -subAttributeName CN
      
       add authentication Policy ldap_pol_for_validation -rule true -action ldap_act_for_validation
       <!--NeedCopy-->
      
  3. 配置第三个因素。OTP 的验证是根据这个因素完成的。此处添加了用于 OTP 密码验证的 LDAP 操作。

    • 为用户 OTP 验证添加策略标签。

      add authentication policylabel otp_validation_login_factor -loginSchema LSCHEMA_INT

    • 为用户 OTP 验证添加 LDAP 操作。

      add authentication ldapAction ldap_otp_validate_action -serverIP <LDAPServerIP> -ldapBase <LdapBase> -ldapBindDn <LdapAdminUser> -ldapBindDnPassword <LdapAdminPassword> -ldapLoginName samAccountName -authentication DISABLED -OTPSecret userParameters

    • 为用户 OTP 验证添加身份验证策略。

      add authentication policy ldap_otp_validate_pol -action ldap_otp_validate_action -rule true

    • 将策略绑定到策略标签。

      bind authentication policylabel otp_validation_login_factor -policyName ldap_otp_validate_pol -priority 100

    • 将当前策略标签绑定为 OTP 登录流程的下一个因素。

      bind authentication policylabel otp_login_flow -policyName aaa_local_pwd_pol -priority 100 -nextFactor otp_validation_login_factor

  4. 通过将第一个因素绑定到身份验证虚拟服务器来完成登录流程。

    bind authentication vserver authvs_otp -policy otp_login_pol -nextfactor otp_login_flow -priority 100

有关 NetScaler 登录的更多信息,请参阅本机 OTP 工作流程

设备注册的推荐本机 OTP 配置