电子邮件 OTP 身份验证
电子邮件 OTP随 Citrix ADC 12.1 Build 51.x 引入。通过电子邮件 OTP 方法,您可以使用发送到已注册的电子邮件地址的一次性密码 (OTP) 进行身份验证。当您尝试在任何服务上进行身份验证时,服务器会向用户的已注册的电子邮件地址发送 OTP。
必须首先注册备用电子邮件 ID,才能使用电子邮件 OTP 功能。需要一个备用电子邮件 ID 注册,以便能够将 OTP 发送到该邮件 ID,因为如果帐户被锁定或者忘记了 AD 密码,您将无法访问主电子邮件 ID。
如果您已将备用电子邮件 ID 作为某个 AD 属性的一部分提供,则可以使用电子邮件 OTP 验证而无需注册电子邮件 ID。可以在电子邮件操作中引用同一属性,而不是在电子邮件地址部分中指定备用电子邮件 ID。
必备条件
在配置电子邮件 OTP 功能之前,请查看以下必备条件:
- Citrix ADC 功能版本 12.1 Build 51.28 及更高版本
- 电子邮件 OTP 功能仅在 nFactor 身份验证流程中可用
- 有关详细信息,请参阅 https://support.citrix.com/pages/citrix-adc-authentication-how#nfactor
- 支持 AAA-TM、Citrix Gateway(浏览器、本机插件和 Receiver)。
Active Directory 设置
- 支持的版本为 2016/2012 和 2008 Active Directory 域功能级别
- Citrix ADC ldapBind 用户名必须具有对用户的 AD 路径的写入权限
电子邮件服务器
-
要使用电子邮件 OTP 解决方案,请确保在 SMTP 服务器上启用了基于登录的身份验证。Citrix ADC 仅支持基于身份验证登录的身份验证才能使用电子邮件 OTP。
-
要确保启用基于 AUTH LOGIN 的身份验证,请在 SMTP 服务器上键入以下命令。如果启用了基于登录的身份验证,您将注意到文本 AUTH LOGIN 以粗体格式显示在输出中。
限制
- 仅当身份验证后端是 LDAP 时才支持此功能。
- 无法看到已注册的备用电子邮件 ID。
- 只有“KBA Registration”(KBA 注册)页面中的备用电子邮件 ID 无法更新。
- 电子邮件 OTP 身份验证不能成为身份验证流程中的首要因素。这是为了实现强大的身份验证。
- 如果使用相同的身份验证操作配置了备用电子邮件 ID 和 KBA,则两者的属性必须相同。
- 对于本机插件和 Receiver,仅支持通过浏览器进行注册。
Active Directory 配置
-
电子邮件 OTP 使用 Active Directory 属性作为用户数据存储。
-
注册备用电子邮件 ID 后,电子邮件 ID 将发送到 Citrix ADC 设备,设备将其存储在 AD 用户对象中已配置的 KB 属性中。
-
备用电子邮件 ID 已加密并存储在配置的 AD 属性中。
配置 AD 属性时,请注意以下事项:
- 支持的属性名称长度必须至少为128 个字符。
- 属性类型必须是 “目录字符串”。
- 相同的 AD 属性可用于本机 OTP 和电子邮件 OTP 注册数据。
- LDAP 管理员必须对所选 AD 属性具有写入权限。
使用现有属性
本示例中使用的属性是 Userparameters
。由于这是 AD 用户内的现有属性,因此您无需对 AD 本身进行任何更改。但是,您必须确保没有使用该属性。
要确保未使用该属性,请导航到 ADSI 并选择用户,右键单击该用户,然后向下滚动到属性列表。您必须看到 UserParameters 的属性值为 not set(未设置)。这表明目前尚未使用该属性。
配置电子邮件 OTP
电子邮件 OTP 解决方案由以下两部分组成:
- 电子邮件注册
- 电子邮件验证
电子邮件ID注册
成功创建 KBA 注册架构后,使用 CLI 执行以下配置:
-
将门户主题和证书绑定到 VPN 全局。
bind authentication vserver authvs -portaltheme RfWebUI bind vpn global -userDataEncryptionKey c1 <!--NeedCopy-->
注意:
加密存储在 AD 属性中的用户数据(知识库问答和备用邮件 ID Registed)时需要先绑定证书。
-
创建 LDAP 身份验证策略。
add authentication ldapAction ldap -serverIP 10.102.2.2 -serverPort 636 -ldapBase "dc=aaatm-test,dc=com" -ldapBindDn administrator@aaatm-test.com -ldapBindDnPassword freebsd -ldapLoginName samAccountName -secType SSL add authentication Policy ldap -rule true -action ldap <!--NeedCopy-->
-
为电子邮件注册创建 LDAP 身份验证策略。
add authentication ldapAction ldap_email_registration -serverIP 10.102.2.2 -serverPort 636 -ldapBase "dc=aaatm-test,dc=com" -ldapBindDn administrator@aaatm-test.com -ldapBindDnPassword freebsd -ldapLoginName samAccountName -secType SSL -KBAttribute userParameters -alternateEmailAttr userParameters add authentication Policy ldap_email_registration -rule true -action ldap_email_registration <!--NeedCopy-->
-
创建电子邮件注册登录架构和策略标签。
add authentication loginSchema onlyEmailRegistration -authenticationSchema /nsconfig/loginschema/LoginSchema/AltEmailRegister.xml add authentication policylabel email_Registration_factor -loginSchema onlyEmailRegistration bind authentication policylabel email_Registration_factor -policyName ldap_email_registration -priority 1 -gotoPriorityExpression NEXT <!--NeedCopy-->
-
将身份验证策略绑定到身份验证虚拟服务器。
bind authentication vserver authvs –policy ldap -priority 1 -nextFactor email_Registration_factor -gotoPriorityExpression NEXT <!--NeedCopy-->
-
配置前几节中提到的所有步骤后,必须看到以下 GUI 屏幕。在通过 URL(例如 https://lb1.server.com/)访问时,您会看到一个初始登录页面,该页面仅需要 LDAP 登录凭据,然后是备用电子邮件注册页面。
注意: 域 https://lb1.server.com/ 可以属于网关或身份验证虚拟服务器。
注意:
您可以对 KBA 注册和电子邮件 ID 注册使用相同的身份验证架构。
配置 KBA 注册时,您可以在“电子邮件注册”部分中选择注册备用电子邮件以注册备用电子邮件 ID。
电子邮件验证
请执行以下步骤进行电子邮件验证。
-
将门户主题和证书绑定到 VPN 全局
bind authentication vserver authvs -portaltheme RfWebUI bind vpn global -userDataEncryptionKey c1 <!--NeedCopy-->
注意:
要解密存储在 AD 属性中的用户数据(知识库问答和备用电子邮件 ID 已注册),必须先绑定证书。
-
创建 LDAP 身份验证策略。LDAP 必须是电子邮件验证因素的优先考虑因素,因为您需要用户的电子邮件 ID 或备用电子邮件 ID 进行电子邮件 OTP 验证。
add authentication ldapAction ldap1 -serverIP 10.102.2.2 -serverPort 636 -ldapBase "dc=aaatm-test,dc=com" - ldapBindDn administrator@aaatm-test.com -ldapBindDnPassword freebsd -ldapLoginName samAccountName -secType SSL -KBAttribute userParameters -alternateEmailAttr userParameters add authentication Policy ldap1 -rule true -action ldap1 <!--NeedCopy-->
-
创建电子邮件身份验证策略。
add authentication emailAction email -userName sqladmin@aaa.com -password freebsd-encrypted -encryptmethod ENCMTHD_3 -serverURL "smtps://10.2.3.3:25" -content "OTP is $code" -defaultAuthenticationGroup emailgrp -emailAddress "aaa.user.attribute("alternate_mail")" add authentication Policy email -rule true –action email <!--NeedCopy-->
在前面提到的命令中,email address 为 KBA 注册期间提供的备用电子邮件 ID 用户。
-
创建电子邮件 OTP 验证策略标签。
add authentication policylabel email_Validation_factor bind authentication policylabel email_Validation_factor -policyName email -priority 1 -gotoPriorityExpression NEXT <!--NeedCopy-->
-
将身份验证策略绑定到身份验证虚拟服务器。
bind authentication vserver authvs – policy ldap1 -priority 1 -nextFactor email_Validation_factor -gotoPriorityExpression NEXT <!--NeedCopy-->
-
配置前面各节中提到的所有步骤后,必须看到以下 GUI 屏幕以进行电子邮件 OTP 验证。在通过 URL(例如 https://lb1.server.com/)访问时,您会看到一个初始登录页面,该页面仅需要 LDAP 登录凭据,然后是 EMAIL OTP 验证页面。
注意:
在 LDAP 策略中,重要的是要配置
alternateEmailAttr
,以便能够从 AD 属性中查询用户的电子邮件 ID。
故障排除
在分析日志之前,最好按如下所示将日志级别设置为调试。
set syslogparams -loglevel DEBUG
<!--NeedCopy-->
注册-成功场景
以下条目表示成功的用户注册。
"ns_aaa_insert_hash_keyValue_entry key:kba_registered value:1"
Nov 14 23:35:51 <local0.debug> 10.102.229.76 11/14/2018:18:05:51 GMT 0-PPE-1 : default SSLVPN Message 1588 0 : "ns_aaa_insert_hash_keyValue_entry key:alternate_mail value:eyJ2ZXJzaW9uIjoiMSIsICJraWQiOiIxbk1oWjN0T2NjLVVvZUx6NDRwZFhxdS01dTA9IiwgImtleSI6IlNiYW9OVlhKNFhUQThKV2dDcmJSV3pxQzRES3QzMWxINUYxQ0tySUpXd0h4SFRIdVlWZjBRRTJtM0ZiYy1RZmlQc0tMeVN2UHpleGlJc2hmVHZBcGVMZjY5dU5iYkYtYXplQzJMTFF1M3JINFVEbzJaSjdhN1pXUFhqbUVrWGdsbjdUYzZ0QWtqWHdQVUI3bE1FYVNpeXhNN1dsRkZXeWtNOVVnOGpPQVdxaz0iLCAiaXYiOiI4RmY3bGRQVzVKLVVEbHV4IiwgImFsZyI6IkFFUzI1Nl9HQ00ifQ==.oKmvOalaOJ3a9z7BcGCSegNPMw=="
<!--NeedCopy-->
注册-失败场景
在用户登录页面上,您会看到以下错误消息:“无法完成您的请求”。这表示要绑定到 VPN 全局以加密用户数据的证书密钥缺失。
Jul 31 08:51:46 <local0.info> 10.102.229.79 07/31/2020:03:21:4 6 GMT 0-PPE-1 : default SSLVPN Message 696 0 : "Encrypt UserData: No Encryption cert is bound to vpn global"
Jul 31 08:51:46 <local0.info> 10.102.229.79 07/31/2020:03:21:46 GMT 0-PPE-1 : default SSLVPN Message 697 0 : "KBA Register: Alternate email id Encrypted blob length is ZERO aaauser"
<!--NeedCopy-->
电子邮件验证 — 成功场景
以下条目表示电子邮件 OTP 验证成功。
"NFactor: Successfully completed email auth, nextfactor is pwd_reset"
<!--NeedCopy-->
电子邮件验证 — 失败场景
在用户登录页面上,显示 “无法完成您的请求” 错误消息。这表示电子邮件服务器上未启用基于登录的身份验证,需要启用相同的身份验证。
" /home/build/rs_130_36_15_RTM/usr.src/netscaler/aaad/pocomail.cpp[100]: void ThreadWorker_SendMailJob(SMTPJob*) 0-215: [POCO][JobID: 8]SMTP Configuration is Secure..
/home/build/rs_130_36_15_RTM/usr.src/netscaler/aaad/pocomail.cpp[108]: void ThreadWorker_SendMailJob(SMTPJob*) 0-215: [POCO][JobID: 8] First login succeeded
Wed Mar 4 17:16:28 2020
/home/build/rs_130_36_15_RTM/usr.src/netscaler/aaad/naaad.c[697]: main 0-0: timer 2 firing...
/home/build/rs_130_36_15_RTM/usr.src/netscaler/aaad/pocomail.cpp[127]: void ThreadWorker_SendMailJob(SMTPJob*) 0-0: [POCO-ERROR][JobID: 8] Poco SMTP Mail Dispatch Failed. SMTP TYPE:1, SMTPException: Exception occurs. SMTP Exception: The mail service does not support LOGIN authentication: 250-smtprelay.citrix.com Hello [10.9.154.239]
250-SIZE 62914560
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-BINARYMIME
250 CHUNKING
<!--NeedCopy-->