读取 LDAP 属性有效,修改它会导致“属性类型未定义”

读取 LDAP 属性有效,修改它会导致“属性类型未定义”

我有一个 Citrix ADC,想使用 OTP 令牌设置多因素身份验证。由于我没有 AD,只有 LDAP 目录,因此身份验证 LDAP 服务器设置为 NDS。

Citrix ADC 读取并写入字段userParameters以存储 OTP 信息。当我尝试添加 OTP 设备时,LDAP 查询失败并显示userParameters: attribute type undefined。该属性本身存在,出于测试目的,我使用绑定用户使用 Apache Directory Studio 手动将所需的 OTP 值写入此字段。这有效,属性存在,绑定用户可以写入此字段。当我尝试读取它时,即对 OTP 令牌进行质询,它会被成功读取,并且我可以执行成功的 OTP 身份验证。但是,如果我尝试修改该值,例如,如果我尝试删除设备或注册新设备,我会收到上述错误消息。

在 slapd 日志中,我可以看到以下内容:

Feb 29 14:40:52 ldap1srv slapd[24460]: conn=89868 fd=48 ACCEPT from IP=172.30.30.100:17045 (IP=0.0.0.0:636)
Feb 29 14:40:52 ldap1srv slapd[24460]: conn=89868 fd=48 TLS established tls_ssf=256 ssf=256
Feb 29 14:40:52 ldap1srv slapd[24460]: conn=89868 op=0 BIND dn="cn=adc_binduser,ou=accounts,o=myorg" method=128
Feb 29 14:40:52 ldap1srv slapd[24460]: conn=89868 op=0 BIND dn="cn=adc_binduser,ou=accounts,o=myorg" mech=SIMPLE ssf=0
Feb 29 14:40:52 ldap1srv slapd[24460]: conn=89868 op=0 RESULT tag=97 err=0 text=
Feb 29 14:40:52 ldap1srv slapd[24460]: conn=89868 op=1 SRCH base="o=myorg" scope=2 deref=0 filter="(&(?SAMACCOUNTNAME=otptestuser)(objectClass=*))"
Feb 29 14:40:52 ldap1srv slapd[24460]: conn=89868 op=1 SRCH attr=PwdLastSet UserAccountControl msDS-User-Account-Control-Computed maxPwdAge objectClass userParameters mail
Feb 29 14:40:53 ldap1srv slapd[24460]: conn=89868 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
Feb 29 14:40:53 ldap1srv slapd[24460]: conn=89868 op=2 MOD dn="cn=otptestuser,ou=testusers,ou=accounts,o=myorg"
Feb 29 14:40:53 ldap1srv slapd[24460]: conn=89868 op=2 MOD attr=userParameters
Feb 29 14:40:53 ldap1srv slapd[24460]: conn=89868 op=2 RESULT tag=103 err=17 text=userParameters: attribute type undefined
Feb 29 14:40:53 ldap1srv slapd[24460]: conn=89868 op=3 UNBIND
Feb 29 14:40:53 ldap1srv slapd[24460]: conn=89868 fd=48 closed

(出于安全目的,我删除/修改了实际的 DN 和绑定用户)

aaad.debug连接到 LDAP 服务器的 ADC 日志中,我可以看到相同的错误,因为它传播回 ADC:

Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/ldap_common.c[2094]: ns_ldap_register_otp 0-562: Attempting to modify attribute 'userParameters'
Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/ldap_drv.c[2622]: get_otp_attribute 0-562: OTP Secret Attribute name: <userParameters>, length 15
Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/naaad.c[6410]: register_timer 0-562: setting timer 1984852
Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/ldap_common.c[448]: ns_ldap_check_result 0-562: checking LDAP result.  Expecting 103 (LDAP_RES_MODIFY)
Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/ldap_common.c[486]: ns_ldap_check_result 0-562: ldap_result found expected result LDAP_RES_MODIFY
Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/ldap_common.c[310]: ns_show_ldap_err_string 0-562: LDAP error string: <<userParameters: attribute type undefined>>
Thu Feb 29 12:51:09 2024
/usr/home/build/adc/usr.src/netscaler/aaad/ldap_common.c[496]: ns_ldap_check_result 0-562: LDAP action failed (error 17): Undefined attribute type
Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/ldap_common.c[498]: ns_ldap_check_result 0-562: For user otptestuser, LDAP authentication failed (error 17): Undefined attribute type
Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/naaad.c[6487]: unregister_timer 0-562: releasing timer 1984852
Thu Feb 29 12:51:09 2024
 /usr/home/build/adc/usr.src/netscaler/aaad/ldap_drv.c[3863]: receive_ldap_register_otp_event 0-562: In receive_ldap_register_otp_event: Unexpected result -1 in the attempt to modify password for user otptestuser

(请忽略不同的时间戳,因为它们来自两个不同的测试。LDAP 和 ADC 是时间同步的,错误总是相同的)

otptestuser由以下objectClasses组成:inetOrgPerson、、、、、、、和ndsLoginPropertiesorganizationalPersonPersonposixAccountpwmUserTopuamPosixUser

我怀疑错误出在 LDAP 服务器上,而不是 ADC 上。从 samaccountname 中,LDAP 服务器找到了 OTP 测试用户的正确 DN。因此,查找用户是可行的。但是,我不明白为什么在修改属性类型时会收到错误消息,提示属性类型未定义,但在读取时却可以正常工作。我这里犯了什么错误?

相关内容