我目前正在尝试为用Golang编写的OpenLDAP客户端实现SASL/EXTERNAL
auth。
换句话说,我要加载以下数据:
ldapsearch -Y EXTERNAL -H ldapi:// -s base -b 'olcDatabase={1}mdb,cn=config' olcSyncRepl
我正在使用https://github.com/go-ldap/ldap库。不幸的是,该库仅支持简单例份验证。我很高兴实现
SASL/EXTERNAL
,但无法识别协议(protocol)的工作原理?例如,存在https://ldap.com/ldapv3-wire-protocol-reference-bind/ CRAM-MD5
身份验证过程。我想得到
SASL/EXTERNAL
的相同解释。我已成功连接到unix套接字(
ldapi://
)。但是我不明白需要哪种程序以编程方式发送以完成身份验证。 最佳答案
我找到了解决方案。
首先,您需要连接到unix套接字。通常,套接字位于/var/run/slapd/ldapi
路径上。
然后,您需要进行两个更改的简单绑定(bind):
sasl
身份验证的pkt := ber.Encode(ber.ClassApplication, ber.TypeConstructed, ApplicationBindRequest, nil, "Bind Request")
pkt.AppendChild(ber.NewInteger(ber.ClassUniversal, ber.TypePrimitive, ber.TagInteger, 3, "Version"))
pkt.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, "", "User Name"))
saslAuth := ber.Encode(ber.ClassContext, ber.TypeConstructed, 3, "", "authentication")
saslAuth.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, "EXTERNAL", "SASL Mech"))
saslAuth.AppendChild(ber.NewString(ber.ClassUniversal, ber.TypePrimitive, ber.TagOctetString, "", "SASL Cred"))
pkt.AppendChild(saslAuth)
这是PR https://github.com/go-ldap/ldap/pull/232。
关于go - 如何在Golang上通过IPC为OpenLDAP客户端实现SASL/EXTERNAL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58272670/