ADC

配置 Web 身份验证的 SMS OTP

NetScaler 现在可以与第三方短信提供商集成,以提供额外的身份验证层。

可以将 NetScaler 设备配置为在用户的移动设备上发送 OTP,作为第二个身份验证因素。设备向用户提供登录表格,以便在成功登录 AD 后进入 OTP。只有在成功验证 SMS OTP 身份验证后,才会向用户显示所请求的资源。

要实现 SMS OTP 身份验证,NetScaler 设备依赖于后端的以下因素。

  1. 使用 LDAP 身份验证对用户进行身份验证并提取用户的手机号码。
  2. 创建 OTP 并将其存储在 NS 变量中。配置和使用变量
  3. 通过 WebAuth 身份验证方法将 OTP 发送到从 LDAP 提取的手机号码。
  4. 验证 OTP。

必备条件

启用功能并添加 SNIP

运行以下命令以启用此配置所需的功能:

enable ns feature LB SSL SSLVPN AAA

add ns ip <SNIP-IP> <subnet mask> -type SNIP
<!--NeedCopy-->

配置 OTP 存储

管理员必须设置数据库/存储以保存用于 SMS 身份验证的 OTP。

expires 参数的推荐配置范围(OTP 到期时间)为 30 到 180 秒。超出此范围的任何值都可能导致 SMS OTP 配置和 nFactor 流失败。

add ns variable otp_store -type "map(text(65),text(6),100000)" -ifValueTooBig undef -ifNoValue undef -expires 60
<!--NeedCopy-->

为每个用户会话生成随机 OTP

使用以下命令为每个用户会话生成一个 6 位随机 OTP,并将其保存在 OTP 存储中。

add ns assignment generate_otp -variable "$otp_store[AAA.USER.SESSIONID]" -set ("000000" + SYS.RANDOM.MUL(1000000).TYPECAST_UNSIGNED_LONG_AT.TYPECAST_TEXT_T).SUFFIX(6)
<!--NeedCopy-->

使用 NetScaler 配置短信 OTP 身份验证

  • 在配置 SMS 双因素身份验证功能之前,必须在 NetScaler 设备上将 LDAP 身份验证配置为启用身份验证的第一要素。有关配置 LDAP 身份验证的说明,请参阅 使用配置实用程序配置 LDAP 身份验证

  • 配置 LDAP 并提取用于 SMS OTP 身份验证的手机号码。

示例第一因素配置

将 LDAP 配置为身份验证的第一个因素。

 add authentication ldapAction ldap_extraction_action -serverIP <IP_Adress> -ldapBase OU=Sanity,dc=aaa,dc=local  -ldapBindDn administrator@aaa.local -ldapBindDnPassword <password> -ldapLoginName samaccountname -groupAttrName memberof -subAttributeName CN -authentication disabled

 add authentication Policy ldap_extraction_policy -rule true -action ldap_extraction_action
<!--NeedCopy-->

注意

可以使用 AAA.USER.ATTRIBUTE(1) 提取手机号码,也可以在将其发送到后端服务器时将其包括在内。

示例第二因素配置

使用以下示例配置,生成要发送给最终用户的 OTP。

add authentication Policy set_otp -rule true -action generate_otp

add authentication policylabel set_otp_label -loginSchema LSCHEMA_INT

 bind authentication policylabel set_otp_label  -policyName set_otp -priority 1

add authentication Policy cascade_noauth -rule true -action NO_AUTHN
<!--NeedCopy-->

Web 身份验证策略和操作

现在,配置 Web 身份验证操作以将 OTP 以及从 LDAP 策略中获取的手机号码发送给任何第三方短信发送器。

检查 OTP 并将生成的 OTP 发送到第三方 SMS 提供商或任何 Web 服务器,配置如下:

add policy expression otp_exp_post ""Message: OTP is " + $otp_store[AAA.USER.SESSIONID] + " for login into secure access  gateway. Valid till EXPIRE_TIME. Do not share the OTP with anyone for security reasons&Mobile:" + AAA.USER.ATTRIBUTE(1)"

add authentication webAuthAction sms_post -serverIP <web_application_ip> -serverPort 80 -fullReqExpr q{"POST /MyPHP/auth.php HTTP/" + http.req.version.major + "." + http.req.version.major + "\r\nAccept:\*/\*\r\nHost: <web_application_ip> \r\nContent-Length:100\r\n\r\n" + otp_exp_post} -scheme http -successRule true

add authentication Policy post_wpp -rule true -action sms_post
<!--NeedCopy-->

检查 OTP

添加以下策略和策略标签以检查用户会话的 OTP 是否存在:

add authentication policylabel check_otp_label -loginSchema LSCHEMA_INT

add authentication Policy check_otp -rule "$otp_store.valueExists(AAA.USER.SESSIONID)" -action NO_AUTHN
<!--NeedCopy-->

通过比较用户提供的值和 OTP 存储值来验证 OTP

运行以下命令,通过比较用户提供的值和 OTP 存储值来验证 OTP:

add authentication loginSchema onlypassword -authenticationSchema "/nsconfig/loginschema/LoginSchema/OnlyPassword.xml"

add authentication policylabel otp_verify_label -loginSchema onlypassword

add authentication Policy otp_verify -rule "AAA.LOGIN.PASSWORD.EQ($otp_store[AAA.USER.SESSIONID])" -action NO_AUTHN
<!--NeedCopy-->

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

bind authentication policylabel set_otp_label -policyName cascade_noauth -priority 2 -gotoPriorityExpression NEXT -nextFactor check_otp_label

bind authentication policylabel check_otp_label -policyName post_wpp -priority 1 -gotoPriorityExpression NEXT -nextFactor otp_verify_label

bind authentication policylabel otp_verify_label -policyName otp_verify -priority 1 -gotoPriorityExpression NEXT
<!--NeedCopy-->

创建身份验证虚拟服务器和负载平衡虚拟服务器

 add authentication vserver avs SSL <ipadresss> 443

add ssl certKey aaa_local -cert aaatm_wild.cer -key aaatm_wild.key

bind ssl vserver avs -certkeyName aaa_local

bind authentication vserver avs -policy ldap_extraction_policy -priority 1 -nextFactor set_otp_label -gotoPriorityExpression NEXT

add lb vserver lb HTTP <ip_adresss> 80 -persistenceType NONE -cltTimeout 180 -AuthenticationHost <auth_server> -Authentication ON

add service svc <Ip_adresss> HTTP 80

bind lb vserver lb svc
<!--NeedCopy-->

注意:

添加了层叠身份验证策略,以便为最终用户启用可靠且持续的身份验证。如果当前因素失效,则评估下一个因素,以免对用户体验产生影响。

配置 Web 身份验证的 SMS OTP