Какой атрибут Active Directory соответствует параметру "bind_password" функции ldap_bind в PHP - PullRequest
0 голосов
/ 27 апреля 2020

Я создаю API для регистрации и аутентификации в Active Directory.

При регистрации я использую поле «userPassword» для хранения пароля.

$user = new User([
    'cn' => $full_name,
    'userPassword' => $password,
    'samaccountname' => $username,
    'mail' => $email
]);

$user->inside(config('ldap.connections.default.base_dn'));

$user->save();

Регистрация работает нормально. Но во время аутентификации Active Directory не распознает предоставленный пароль:

$user = User::where('samaccountname', '=', $username)->firstOrFail(); // all is good here. print_r($user) shows user details

if (Container::getDefaultConnection()->auth()->attempt($user['distinguishedname'], $password)) {

    // returns a response to the user
    return \response()->json(
        new UserResource($user), 200
    );

} else {

    return \response()->json(
        [
            'message' => 'invalid credentials or user not exists.'
        ], 403
    );
}

Может кто-нибудь мне помочь.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Атрибут, используемый для установки пароля учетной записи: unicodePwd. Этот атрибут может быть только установлен, но не прочитан.

Существуют некоторые строгие требования к формату того, что вы помещаете туда, которые описаны в документации Microsoft. Тем не менее, библиотека LdapRecord обрабатывает это для вас, согласно их документации :

Строка пароля, установленная вами для атрибута users unicodePwd, автоматически кодируется, вам не нужно кодировать его самостоятельно.

Их пример создания пользователя AD выглядит следующим образом:

$user = (new User)->inside('ou=Users,dc=local,dc=com');

$user->cn = 'John Doe';
$user->samaccountname = 'jdoe';
$user->unicodePwd = 'SecretPassword';
$user->userPrincipalName = 'jdoe@acme.org';

$user->save();

// Enable the user.
$user->userAccountControl = 512;

try {
    $user->save();
} catch (\LdapRecord\LdapRecordException $e) {
    // Failed saving user.
}
0 голосов
/ 27 апреля 2020

Использование простого сохраненного пароля не сработает, есть некоторая кодировка, которую необходимо выполнить, но есть мутатор unicodePwd, который будет обрабатывать его для вас. Попробуйте

$user = new User([
    'cn' => $full_name,
    'unicodePwd ' => $password,
    'samaccountname' => $username,
    'mail' => $email
]);
...