0

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

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

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

我有这个测试代码:

$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 的连接(效果很好)。

4

1 回答 1

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

或者您可以基于LdapUserProviderand编写您自己的用户提供程序adLDAP。像这样的东西:

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(...)
    );
});
于 2016-02-09T10:28:04.957 回答