Symfony2(.7):防火墙中具有活动目录的用户

时间:2016-02-09 10:09:40

标签: php symfony silex adldap

我搜索了这种连接,但所有捆绑包都不能与symfony security 2.7(Composer说包问题)和symfony 3.0一起使用。

注意:我实际上使用的是Silex Framework。

如果用户连接到活动目录,我想返回true或false响应。

我有测试代码:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
        'login' => array(
            'pattern' => '^/login$',
        ),        
        'secured' => array(
            'pattern' => '^/',
            'anonymous' => false,
            'logout' => true,
            'form' => array('login_path' => '/login', 'check_path' => '/login_check'),
            'users' => array(
                // raw password is foo
                'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='),
            ),
        ),
    ),
));

使用admin&登录foo工作,但那不是我想要的。 我想替换这部分代码:

'users' => array(
    // raw password is foo
    'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='),
),

或任何其他解决方案,以取代允许用户绕过防火墙并输入应用程序的价值。

注意: 我使用adLDAP插件来测试与Active Directory的连接(它完美地运行)。

1 个答案:

答案 0 :(得分:0)

尝试使用LdapUserProvider。从'users' => array(...)配置中删除secured并添加此区域的用户提供商定义。

$app['security.user_provider.secured'] = $app->share(function($app) {
    return new \Symfony\Component\Security\Core\User\LdapUserProvider(
        new \Symfony\Component\Ldap\LdapClient('ldap.server.com'),
        'baseDn', // ex.: dc=example,dc=com
        'searchDn' // ex.: CN={username},DC=example,DC=com
    );
});

或者您可以根据LdapUserProvideradLDAP编写自己的用户提供商。像这样:

namespace My\Namespace;

use Symfony\Component\Security\Core\User\LdapUserProvider;
use Symfony\Component\Security\Core\User\User;

class adLdapUserProvider extends LdapUserProvider
{
    public function loadUserByUsername($username)
    {
        // you code, that returns user from ldap server
        // $this->ldap - is object of adLDAP
        $user = $this->ldap->user()->info($username);

        return $this->loadUser($username, $user);
    }
}

并更改用户提供商定义

$app['security.user_provider.secured'] = $app->share(function($app) {
    return new \My\Namespace\adLdapUserProvider(
        new \adLDAP\adLDAP(...)
    );
});