Как реализовать SASL / EXTERNAL для клиента OpenLDAP через IPC на Голанге? - PullRequest
2 голосов
/ 07 октября 2019

В настоящее время я пытаюсь реализовать SASL/EXTERNAL аутентификацию для клиента OpenLDAP, написанного на Golang.

Другими словами, я хочу загрузить следующие данные:

ldapsearch -Y EXTERNAL -H ldapi:// -s base -b 'olcDatabase={1}mdb,cn=config' olcSyncRepl

I 'м с использованием https://github.com/go-ldap/ldap библиотеки. К сожалению, библиотека поддерживает только простую аутентификацию. Я счастлив реализовать SASL/EXTERNAL, но не смог распознать, как работает протокол? Например, существует процесс аутентификации https://ldap.com/ldapv3-wire-protocol-reference-bind/ CRAM-MD5.

Я хочу получить то же самое объяснение для SASL/EXTERNAL.

Я успешно подключился к сокету Unix (ldapi://). Но я не понимаю, какие команды нужно отправлять программно для завершения аутентификации.

1 Ответ

0 голосов
/ 08 октября 2019

Я нашел решение.

Прежде всего, вам необходимо подключиться к сокету Unix. Обычно сокет располагается по пути /var/run/slapd/ldapi.

Затем необходимо выполнить простую привязку с двумя изменениями:

  1. имя пользователя должно быть пустым
  2. необходимо указатьчто вы хотите использовать 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.

...