2017-04-13 85 views
0

私はLaravel 5.4で従来のデータベースメソッドの代わりにLDAPを使用してユーザーを認証しようとしています。管理接続なしでLDAPを使用したLaravelの認証/ログイン?

既にライブラリがあります。Adldap2/Adldap2-Laravelです。問題は、このライブラリのことです。

  1. は、パスワードが正しいことを私のアプリに
  2. チェックをログに記録したいユーザを検索し、adminユーザーとして最初のLDAPサーバを接続する
  3. 店舗
  4. これはないadminユーザー

としてLDAPに再接続し、「ローカル」Laravelデータベースにそのユーザーに関連付けられたデータ私のケースでは、LDAPサーバーには私が接続する必要のある管理者がいないので、動かすことができます。役割を持たないユーザー名のみがアプリの使用を許可されています。 already existing issueに見られるように

、私は(私はこのウェブページで提供サーバーに接続しようとしているテストの目的のために:Online LDAP Test Server)follwoingコードでLoginControllerクラスを変更しました。

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; 
} 

私が今持っている問題は、一度正しい資格情報でログインし、私は戻って、ログインフォームに送信されています、ということです。資格情報が間違っていると、対応するエラーメッセージが表示されます。念のため

マイコンフィギュレーションファイル、:

.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, 
      ], 
     ], 
    ], 
] 

答えて

1

場合誰もこの質問につまずいて、私はaw私が欲しいものを達成するためにステップバイステップガイドはHowto: adminless LDAP authentification in Laravelです。

基本的には、LoginController::attemptLogin()trueを返す前に、Guardは、データベース内のApp\Userを保存するために使用する必要があります。

関連する問題