4

Laravel4 での LDAP 認証について教えてください。

以下の私の設定は常に false を返します

私はこのようなauth.phpを持っています:

<?php

return array(

/*
|--------------------------------------------------------------------------
| Default Authentication Driver
|--------------------------------------------------------------------------
|
| This option controls the authentication driver that will be utilized.
| This driver manages the retrieval and authentication of the users
| attempting to get access to protected areas of your application.
|
| Supported: "database", "eloquent"
|
*/

//'driver' => 'eloquent',
'driver' => 'ldap',

/*
|--------------------------------------------------------------------------
| Authentication Model
|--------------------------------------------------------------------------
|
| When using the "Eloquent" authentication driver, we need to know which
| Eloquent model should be used to retrieve your users. Of course, it
| is often just the "User" model but you may use whatever you like.
|
*/
'username_field' => 'username',

'model' => 'User',

/*
|--------------------------------------------------------------------------
| Authentication Table
|--------------------------------------------------------------------------
|
| When using the "Database" authentication driver, we need to know which
| table should be used to retrieve your users. We have chosen a basic
| default value but you may easily change it to any table you like.
|
*/

'table' => 'users',

/*
|--------------------------------------------------------------------------
| Password Reminder Settings
|--------------------------------------------------------------------------
|
| Here you may set the settings for password reminders, including a view
| that should be used as your password reminder e-mail. You will also
| be able to set the name of the table that holds the reset tokens.
|
| The "expire" time is the number of minutes that the reminder should be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/

'reminder' => array(

    'email' => 'emails.auth.reminder',

    'table' => 'password_reminders',

    'expire' => 60,

),

);

そして私のapp/config/adldap.phpは次のようになります:

<?php

return array(
    'account_suffix' => "@pusat.corp.pln.co.id",
'domain_controllers' => array("dc01.pusat.corp.pln.co.id","pusat.corp.pln.co.id"), // An array of domains may be provided for load balancing.

'base_dn' => 'DC=pusat','DC=corp','DC=pln','DC=co','DC=id',


'real_primary_group' => true, // Returns the primary group (an educated guess).

'use_ssl' => false, // If TLS is true this MUST be false.

'use_tls' => false, // If SSL is true this MUST be false.

    'recursive_groups' => true,

);

routes.php で

Route::post('login', function () {
    $passhash = Input::get('password');
    $credentials  = array(
        'username' => Input::get('username'),
        'password' => Input::get('password')
    );


    if ($a = Auth::attempt($credentials))
        return '<pre>' . print_r(Auth::user(), true);
    else
        dd($a);
});
4

1 に答える 1

10

Laravel 4 のコアには LDAP 認証が組み込まれていません。したがって、これはアプリに追加する手っ取り早い汚い方法です。php5-ldap内部 LDAP PHP 関数を使用しているため、パッケージをインストールする必要があります。

app/conf/auth.php の構成:

'ldap_tree'   => 'OU=anything,DC=domain,DC=com',
'ldap_server' => 'your.ldap.server.com',

これは、コントローラーで使用される LDAP クラスです。

class LDAP {

    public static function authenticate($username, $password)
    {
        if(empty($username) or empty($password))
        {
            Log::error('Error binding to LDAP: username or password empty');
            return false;
        }

        $ldapRdn = static::getLdapRdn($username);

        $ldapconn = ldap_connect( Config::get('auth.ldap_server') ) or die("Could not connect to LDAP server.");

        $result = false;

        if ($ldapconn) 
        {
            $ldapbind = @ldap_bind($ldapconn, $ldapRdn, $password);

            if ($ldapbind) 
            {
                $result = true;
            } else {
                Log::error('Error binding to LDAP server.');
            }

            ldap_unbind($ldapconn);

        } else {
            Log::error('Error connecting to LDAP.');
        }

        return $result;

    }

    public static function getLdapRdn($username)
    {
        return str_replace('[username]', $username, 'CN=[username],' . Config::get('auth.ldap_tree'));
    }

}

そして、アプリでログインを処理するための AuthController:

class AuthController extends Controller {

    public function __construct(LDAP $ldap)
    {
        $this->ldap = $ldap;
    }

    public function login()
    {
        if ( $this->ldap->authenticate( Input::get('email'), Input::get('password') ) )
        {
            $user = User::where('email', Input::get('email'))->first();

            Auth::login( $user );

            return Redirect::to('home');
        }

        return Redirect::refresh()->with('error', 'User and/or password are incorrect.');
    }

    public function logout()
    {

        if ( ! Auth::guest())
        {
            Auth::logout();

            return Redirect::to('message')
                    ->with('message', 'You just logged out.');                  
        }

        return Redirect::to('login');   

    }

}

このコントローラーは LDAP クラスに依存性注入を使用していることに注意してください。これは Laravel によって自動的に注入されます。

于 2013-11-21T16:30:04.943 に答える