Citrix ADC

电子邮件 OTP

电子邮件 OTP 通过 Citrix ADC 12.1 版本 51.x 引入. 使用电子邮件 OTP 方法,您可以使用发送到注册电子邮件地址的一次性密码 (OTP) 进行身份验证。当您尝试在任何服务上进行身份验证时,服务器会向用户的注册电子邮件地址发送一个 OTP。

要使用电子邮件 OTP 功能,您必须先注册备用电子邮件 ID。需要备用电子邮件 ID 注册,以便可以将 OTP 发送到该邮件 ID,因为如果帐户锁定或忘记 AD 密码,您将无法访问主电子邮件 ID。

如果您已将备用电子邮件 ID 作为某些 AD 属性的一部分提供,则可以使用电子邮件 OTP 验证而无需注册电子邮件 ID。您可以在电子邮件操作中引用相同的属性,而不是在电子邮件地址部分指定备用电子邮件 ID。

必备条件

在配置电子邮件 OTP 功能之前,请查看以下先决条件:

活动目录设置

  • 支持的版本是 2016/2012 年和 2008 年 Active Directory 域功能级别
  • Citrix ADC ldapBind 用户名必须具有对用户 AD 路径的写访问权限

邮件服务器

  • 要使电子邮件 OTP 解决方案起作用,请确保在 SMTP 服务器上启用基于登录的身份验证。Citrix ADC 仅支持基于身份验证登录的身份验证,以便电子邮件 OTP 正常工作。

  • 要确保启用基于身份验证登录的身份验证,请在 SMTP 服务器上键入以下命令。如果启用了基于登录的身份验证,您会注意到文本 AUTH LOGIN 在输出中以粗体显示。

在 SMTP 服务器上启用基于登录的身份验证

限制

  • 仅当身份验证后端为 LDAP 时,才支持此功能。
  • 无法看到已注册的备用电子邮件 ID。
  • 只有 KBA 注册页面中的备用电子邮件 ID 无法更新。
  • KBA 和电子邮件 OTP 身份验证和注册不能成为身份验证流程中的首要因素。这是为了实现强大的身份验证而设计的。
  • 如果使用相同的身份验证 LDAP 操作,则必须为 KBA 和备用电子邮件 ID 配置相同的 AD 属性。
  • 对于本机插件和 Receiver,只能通过浏览器进行注册。

Active Directory 配置

  • 电子邮件 OTP 使用 Active Directory 属性作为用户数据存储。

  • 注册备用电子邮件 ID 后,它们将发送到 Citrix ADC 设备,并且设备将其存储在 AD 用户对象中已配置的 KB 属性中。

  • 备用电子邮件 ID 已加密并存储在配置的 AD 属性中。

配置 AD 属性时,请考虑以下事项:

  • 支持的属性 名称长度必须至少为 128 个字符。
  • 属性类型必须是“DirectoryString”。
  • 相同的 AD 属性可用于本机 OTP 和 KBA 注册数据。
  • LDAP 管理员必须具有对所选 AD 属性的写访问权限。

使用现有属性

此示例中使用的属性是“用户参数”。由于这是 AD 用户中的现有属性,因此无需对 AD 本身进行任何更改。但是,您必须确保未使用该属性。

要确保未使用该属性,请导航到 ADSI 并选择用户,右键单击该用户,然后向下滚动到属性列表。您必须将 UserParameters 的属性值看为 not set。这表示目前尚未使用该属性。

AD 属性设置

配置电子邮件 OTP

电子邮件 OTP 解决方案由以下两部分组成:

  • 电子邮件注册
  • 电子邮件验证

电子邮件注册

注册用户备用电子邮件 ID 的方法有两种:

  1. 与 KBA 注册一起
  2. 仅电子邮件 ID 注册-此方法受 13.0 版本 61.x 及更高版本支持;12.1 版本 58.x 及更高版本支持。

与 KBA 注册一起

KBA 注册登录模式

  1. 导航到 安全性 > AAA — 应用程序流量 > 登录架构 > 配置文件 ,然后单击 添加 KBA 注册登录架构

KBA 注册登录模式

  1. 配置 KBA 注册身份验证架构。生成此登录模式后,将显示在注册过程中为最终用户配置的所有问题。在 电子邮件注册 部分,选中注册备用电子邮件选项以注册用户的备用电子邮件 ID。

身份验证登录模式

用户定义的问题

  1. 在电子邮件注册部分,选中 注册备用电子邮件 以注册备用电子邮件 ID。

注册备用电子邮件

成功创建上述 KBA 注册模式后,请使用 CLI 命令提示符执行以下配置。

将门户主题和证书绑定到 VPN 全局

bind authentication vserver auth1 -portaltheme RfWebUI
bind vpn global -userDataEncryptionKey c1

要加密存储在 AD 属性中的用户数据(知识库问答和注册的备用电子邮件 ID),需要前面的证书绑定

创建 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 ldap1

创建 KBA 注册登录架构和策略标签

add authentication loginSchema Registrationschema -authenticationSchema /nsconfig/loginschema/LoginSchema/KBARegistrationSchema.xml [This is the authentication schema created in the previous section.]
add authentication policylabel Registrationfactor -loginSchema Registrationschema
add authentication ldapAction ldap_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_registration -rule true -action ldap_registration
bind authentication policylabel Registrationfactor -policyName ldap_registration -priority 1 -gotoPriorityExpression NEXT

将验证策略绑定到验证虚拟服务器

bind authentication vserver authvs – policy ldap -priority 1 -nextFactor Registrationfactor -gotoPriorityExpression NEXT
  1. 配置前面各节中提到的所有步骤后,您必须看到以下 GUI 屏幕:

例如,通过 URL 访问时,https://lb1.server.com/ 您将显示一个初始登录页面,该页面仅需要 LDAP 登录凭据:

双重登录页面

使用有效凭据登录后,您将看到“用户注册”页面,如下所示:

KBA 注册登录

单击提交以使用户注册成功并创建会话。

仅注册电子邮件 ID

在成功创建上述 KBA 注册模式后,使用 CLI 命令提示符执行以下配置:

将门户主题和证书绑定到 VPN 全局

bind authentication vserver auth1 -portaltheme RfWebUI
bind vpn global -userDataEncryptionKey c1

要加密存储在 AD 属性中的用户数据(KB 问答和备用邮件 ID 已注册),需要前面的证书绑定。

创建 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 ldap1

为电子邮件注册创建 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

创建电子邮件注册登录架构和策略标签

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

将验证策略绑定到验证虚拟服务器

bind authentication vserver authvs – policy ldap -priority 1 -nextFactor email_Registration_factor - gotoPriorityExpression NEXT

配置前面各节中提到的所有步骤后,您必须看到以下 GUI 屏幕:

例如,通过 URL 访问时,https://lb1.server.com/ 您将显示一个初始登录页面,该页面仅需要 LDAP 登录凭据,然后是备用电子邮件注册页面:

双重登录页面

电子邮件注册登录

电子邮件验证

将门户主题和证书绑定到 VPN 全局

bind authentication vserver auth1 -portaltheme RfWebUI
bind vpn global -userDataEncryptionKey c1

需要先前的证书绑定才能解密存储在 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

创建电子邮件身份验证策略

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

在前面提到的命令中,电子邮件地址是 KBA 注册期间提供的备用电子邮件 ID 用户。电子邮件/密码是管理员配置的电子邮件 ID,电子邮件发送到用户注册的备用电子邮件 ID。

创建电子邮件 OTP 验证策略标签

add authentication policylabel email_Validation_factor
bind authentication policylabel email_Validation_factor -policyName email -priority 1 -gotoPriorityExpression NEXT

将验证策略绑定到验证虚拟服务器

bind authentication vserver authvs – policy ldap1 -priority 1 -nextFactor email_Validation_factor -gotoPriorityExpression NEXT

配置前面各节中提到的所有步骤后,您必须看到以下 GUI 屏幕用于电子邮件 OTP 验证:

例如,通过 URL 访问时,https://lb1.server.com/ 您将显示一个初始登录页面,该页面仅需要 LDAP 登录凭据,然后是电子邮件 OTP 验证页面。在 LDAP 策略中,配置备用电子邮件 Attr 以便能够从 AD 属性查询用户的电子邮件 ID 非常重要。

双重登录页面

来自电子邮件的 OTP

故障排除

NS 日志 在分析日志之前,最好将日志级别设置为调试,如下所示:

set syslogparams -loglevel DEBUG

注册 — 成功方案

以下条目表示用户注册成功:

"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=="

注册 — 失败的方案

在用户登录页面上,我们看到“无法完成您的请求” 这表示要限制到 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"

电子邮件验证 — 成功方案

以下条目表示电子邮件 OTP 验证成功。

"NFactor: Successfully completed email auth, nextfactor is pwd_reset"

电子邮件验证 — 失败方案

在用户登录页面上,显示“无法完成请求”错误消息。这表示未在电子邮件服务器上启用基于登录的身份验证,并且需要启用同样的身份验证。

" /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

电子邮件 OTP