Authentifizierung/login in Laravel die Verwendung von LDAP mit keine admin-Verbindung?
Ich versuche Laravel 5.4 zum authentifizieren von Benutzern LDAP verwenden, statt der traditionellen Datenbank-Methode.
Gibt es eine Bibliothek für die bereits, Adldap2/Adldap2-Laravel. Das problem ist, dass diese Bibliothek:
- verbindet erste, die den LDAP-server als Benutzer " admin
- sucht dann für den Benutzer, der sich einloggen will in meine app
- überprüft, dass das Passwort richtig ist
- speichert die Daten zu diesem Benutzer in der "lokalen" Laravel-Datenbank
- die Verbindung mit dem LDAP als Benutzer "admin"
Diese funktioniert nicht in meinem Fall, weil es keine admins auf dem LDAP-server, den ich haben möchte haben, zu verbinden; nur Benutzernamen erlaubt, die app zu benutzen, ohne Rollen.
In einer bereits bestehende Problem, modifizierte ich die LoginController
Klasse mit der folgende code (zu Testzwecken, ich versuche zum server zu verbinden, sofern in dieser web-Seite: Online-LDAP Test-Server).
protected function attemptLogin(Request $request) {
$conn_settings = config('adldap.connections')[config('adldap_auth.connection')]['connection_settings'];
$credentials = $request->only(config('adldap_auth.usernames.eloquent'), 'password');
$user_format = env('ADLDAP_USER_FORMAT', 'uid=%s,' . $conn_settings['base_dn']);
$userdn = sprintf($user_format, $credentials[config('adldap_auth.usernames.eloquent')]);
$pass = $credentials['password'];
if(Adldap::auth()->attempt($userdn, $pass, $bindAsUser = true)) {
return true;
}
return false;
}
Das problem, das ich jetzt habe ist, dass, sobald Sie eingeloggt sind mit den richtigen Anmeldeinformationen, bin ich wieder zurück geschickt, um das login-Formular. Wenn die Anmeldeinformationen falsch sind, bekomme ich die entsprechende Fehlermeldung.
Meine Konfigurations-Dateien, nur für den Fall:
.env:
ADLDAP_CONTROLLERS=ldap.forumsys.com
ADLDAP_BASEDN=dc=example,dc=com
ADLDAP_USER_FORMAT=uid=%s,dc=example,dc=com
adldap_auth.php:
[
'connection' => env('ADLDAP_CONNECTION', 'default'),
'provider' => Adldap\Laravel\Auth\DatabaseUserProvider::class,
'resolver' => Adldap\Laravel\Auth\Resolver::class,
'importer' => Adldap\Laravel\Auth\Importer::class,
'rules' => [
Adldap\Laravel\Validation\Rules\DenyTrashed::class,
//Adldap\Laravel\Validation\Rules\OnlyImported::class,
],
'scopes' => [
Adldap\Laravel\Scopes\UpnScope::class,
],
'usernames' => [
'ldap' => 'uid',
'eloquent' => 'username',
],
'login_fallback' => env('ADLDAP_LOGIN_FALLBACK', false),
'password_sync' => env('ADLDAP_PASSWORD_SYNC', true),
'windows_auth_attribute' => ['samaccountname' => 'AUTH_USER'],
'sync_attributes' => [
'username' => 'uid',
'name' => 'cn',
],
];
adldap.php:
return [
'connections' => [
'default' => [
'auto_connect' => false,
'connection' => Adldap\Connections\Ldap::class,
'schema' => Adldap\Schemas\ActiveDirectory::class,
'connection_settings' => [
'account_prefix' => env('ADLDAP_ACCOUNT_PREFIX', ''),
'account_suffix' => env('ADLDAP_ACCOUNT_SUFFIX', ''),
'domain_controllers' => explode(' ', env('ADLDAP_CONTROLLERS', 'corp-dc1.corp.acme.org corp-dc2.corp.acme.org')),
'port' => env('ADLDAP_PORT', 389),
'timeout' => env('ADLDAP_TIMEOUT', 5),
'base_dn' => env('ADLDAP_BASEDN', 'dc=corp,dc=acme,dc=org'),
'admin_account_suffix' => env('ADLDAP_ADMIN_ACCOUNT_SUFFIX', ''),
'admin_username' => env('ADLDAP_ADMIN_USERNAME', ''),
'admin_password' => env('ADLDAP_ADMIN_PASSWORD', ''),
'follow_referrals' => true,
'use_ssl' => false,
'use_tls' => false,
],
],
],
]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Falls jemand stößt auf diese Frage, fand ich einen Weg, das zu erreichen, was ich wollte. Die Schritt-für-Schritt-Anleitung ist hier: Howto: adminless LDAP-Authentifizierung in Laravel.
Grundsätzlich, vor der Rückkehr
true
imLoginController::attemptLogin()
, dieGuard
verwendet werden, um eineApp\User
in der Datenbank.