2017-04-13 2 views
0

저는 Laravel 5.4가 기존의 데이터베이스 방식 대신 LDAP를 사용하여 사용자를 인증하도록하려고합니다.관리자 연결없이 LDAP를 사용하여 Laravel에서 인증/로그인 하시겠습니까?

이미 라이브러리가 있습니다. Adldap2/Adldap2-Laravel. 문제는이 라이브러리이다 :

  1. 다음 암호가 올바른지 내 애플 리케이션에
  2. 수표를 기록하고자하는 사용자를 검색 관리자 사용자로 먼저 LDAP 서버를 연결
  3. 저장
  4. 이하지 않는 관리 사용자

로 LDAP에 다시 연결 "로컬"Laravel 데이터베이스에서 해당 사용자에 관련된 데이터 내 경우에는 LDAP 서버에 관리자가 없어서 연결해야합니다. 역할이없는 사용자 만 앱을 사용할 수 있습니다. already existing issue에서 보는 바와 같이

, 나는 (: Online LDAP Test Server 나는이 웹 페이지에서 제공하는 서버에 연결을 시도하고 테스트 목적)이 때라도 코드로 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을 저장하는 데 사용되어야한다.

관련 문제