Citrix ADC

电子邮件 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 功能之前,请查看以下必备条件:

Active Directory 设置

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

电子邮件服务器

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

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

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

限制

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

Active Directory 配置

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

  • 注册备用电子邮件 ID 后,这些 ID 将发送到 Citrix ADC 设备,该设备将其存储在 AD 用户对象中配置的知识库属性中。

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

配置 AD 属性时,请注意以下事项:

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

使用现有属性

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

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

AD 属性设置

配置电子邮件 OTP

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

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

电子邮件注册

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

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

与 KBA 注册一起

KBA 注册登录架构

  1. 导航到 Security(安全)> AAA – Application Traffic(AAA – 应用程序流量)> Login Schema(登录架构)> Profiles(配置文件),然后单击 Add KBA Registration LoginSchema(添加 KBA 注册登录架构)。

    KBA 注册登录架构

  2. 配置 KBA 注册身份验证架构。此登录架构一旦生成,则将显示在注册过程中为最终用户配置的所有问题。在 Email Registration(电子邮件注册)部分中,选中“Register Alternate Email”(注册备用电子邮件)选项以注册用户的备用电子邮件 ID。

    身份验证登录架构

    用户定义的问题

  3. 在“Email Registration”(电子邮件注册)部分中,选中 Register Alternate Email(注册备用电子邮件)以注册备用电子邮件 ID。

    注册备用电子邮件

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

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

    bind authentication vserver authvs -portaltheme RfWebUI
    bind vpn global -userDataEncryptionKey c1
    <!--NeedCopy-->
    

    注意:

    需要先绑定证书才能加密存储在 AD 属性中的用户数据(知识库常见问题解答和已注册的备用电子邮件 ID)

  2. 创建 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-->
    
  3. 创建 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
    <!--NeedCopy-->
    
  4. 将身份验证策略绑定到身份验证虚拟服务器。

    bind authentication vserver authvs – policy ldap -priority 1 -nextFactor Registrationfactor -gotoPriorityExpression NEXT
    <!--NeedCopy-->
    
  5. 配置前几节中提到的所有步骤后,必须看到以下 GUI 屏幕。例如,通过 URL https://lb1.server.com/ 访问时,您将看到一个仅需要 LDAP 登录凭据的初始登录页面。

    双重身份验证登录页面

  6. 使用有效凭据登录后,您将看到用户注册页面,如下所示。

    KBA 注册登录

  7. 单击 Submit(提交)使用户注册成功并创建会话。

仅电子邮件 ID 注册

成功创建前面的 KBA 注册架构后,使用 CLI 命令提示符执行以下配置:

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

    bind authentication vserver authvs -portaltheme RfWebUI
    bind vpn global -userDataEncryptionKey c1
    <!--NeedCopy-->
    

    注意:

    需要先绑定证书才能加密存储在 AD 属性中的用户数据(知识库常见问题解答和已注册的备用邮件 ID)。

  2. 创建 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-->
    
  3. 为电子邮件注册创建 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-->
    
  4. 创建电子邮件注册登录架构和策略标签。

    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-->
    
  5. 将身份验证策略绑定到身份验证虚拟服务器。

    bind authentication vserver authvs –policy ldap -priority 1 -nextFactor email_Registration_factor -gotoPriorityExpression NEXT
    <!--NeedCopy-->
    
  6. 配置前几节中提到的所有步骤后,必须看到以下 GUI 屏幕。例如,通过 URL https://lb1.server.com/ 访问时,您将看到一个初始登录页面,该页面只需要 LDAP 登录凭据,然后显示备用的电子邮件注册页面。

    双重身份验证登录页面

    电子邮件注册登录

电子邮件验证

执行以下步骤进行电子邮件验证。

  1. 将门户主题和证书绑定到 VPN 全球

    bind authentication vserver authvs -portaltheme RfWebUI
    bind vpn global -userDataEncryptionKey c1
    <!--NeedCopy-->
    

    注意:

    需要先绑定证书才能解密存储在 AD 属性中的用户数据(知识库常见问题解答和已注册的备用电子邮件 ID)。

  2. 创建 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-->
    
  3. 创建电子邮件身份验证策略

    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 用户。

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

    add authentication policylabel email_Validation_factor
    bind authentication policylabel email_Validation_factor -policyName email -priority 1 -gotoPriorityExpression NEXT
    <!--NeedCopy-->
    
  5. 将身份验证策略绑定到身份验证虚拟服务器

    bind authentication vserver authvs – policy ldap1 -priority 1 -nextFactor email_Validation_factor -gotoPriorityExpression NEXT
    <!--NeedCopy-->
    
  6. 配置前面各节中提到的所有步骤后,必须看到以下 GUI 屏幕以进行电子邮件 OTP 验证。例如,通过 URL https://lb1.server.com/ 访问时,您将看到一个初始登录页面,该页面只需要 LDAP 登录凭据,然后显示电子邮件 OTP 验证页面。

    注意:

    在 LDAP 策略中,配置 alternateEmailAttr 以便能够从 AD 属性查询用户的电子邮件 ID 非常重要。

    双重身份验证登录页面

    来自电子邮件的 OTP

故障排除

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

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

注册 - 失败场景

在用户登录页面上,您会看到以下错误消息:“Cannot Complete your request”(无法完成您的请求)。这表示缺少被绑定到 VPN 全局用于加密用户数据的 certkey。

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

电子邮件验证 - 失败场景

在用户登录页面上,将显示“Cannot Complete your request”(无法完成您的请求)错误消息。这表示电子邮件服务器上未启用基于登录的身份验证,需要启用相同的身份验证。

" /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-->
电子邮件 OTP 身份验证