配置 Web 身份验证的 SMS OTP
NetScaler 现在可以与第三方短信提供商集成,以提供额外的身份验证层。
可以将 NetScaler 设备配置为在用户的移动设备上发送 OTP,作为第二个身份验证因素。设备向用户提供登录表格,以便在成功登录 AD 后进入 OTP。只有在成功验证 SMS OTP 身份验证后,才会向用户显示所请求的资源。
要实现 SMS OTP 身份验证,NetScaler 设备依赖于后端的以下因素。
- 使用 LDAP 身份验证对用户进行身份验证并提取用户的手机号码。
- 创建 OTP 并将其存储在 NS 变量中。配置和使用变量。
- 通过 WebAuth 身份验证方法将 OTP 发送到从 LDAP 提取的手机号码。
- 验证 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-->
注意:
添加了层叠身份验证策略,以便为最终用户启用可靠且持续的身份验证。如果当前因素失效,则评估下一个因素,以免对用户体验产生影响。