Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2(.7):使用active directory的防火墙中的用户_Php_Symfony_Silex_Adldap - Fatal编程技术网

Php Symfony2(.7):使用active directory的防火墙中的用户

Php Symfony2(.7):使用active directory的防火墙中的用户,php,symfony,silex,adldap,Php,Symfony,Silex,Adldap,我搜索了这种连接,但所有捆绑包都不能与symfony security 2.7(Composer说软件包有问题)和symfony 3.0一起使用 注意:我实际上使用的是Silex框架 如果用户连接到active directory,我想返回一个true或false响应 我有以下测试代码: $app->register(new Silex\Provider\SecurityServiceProvider(), array( 'security.firewalls' => arr

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

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

如果用户连接到active directory,我想返回一个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的连接(它工作得非常好)。

尝试使用
LdapUserProvider
。从
secured
config中删除
'users'=>数组(…)
,并为此区域添加用户提供程序定义

$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
    );
});
或者,您可以基于
LdapUserProvider
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(...)
    );
});

现在,我有以下错误:`ldap_search():search:Operations error`显示用于
LdapUserProvider
adLDAP
的参数:[…]`(new\Symfony\Component\ldap\LdapClient('srv-ad-01.domd232.com'),'dc=domd1232,dc=com','CN={username},dc=domd1232,dc=com');`我尝试不使用CN,但仍然需要相同的密码。尝试比较LdapUserProvider和adLDAP参数。LdapUserProvider构造函数接口是
(ldapclienterface$ldap,$baseDn,$searchDn=null,$searchPassword=null,array$defaultRoles=array(),$uidKey='sAMAccountName',$filter='({uid\u key}={username})
我已经在Symfony\Component\ldap\LdapClient类中硬编码了我的凭据,但它仍然说“凭据不正确”或者我犯了一些其他的错误。我发现这个类中的ldap_search()函数返回一个带有“'count'=>0”的数组。我还复制/粘贴了过滤器等,他们在adLDAP类中,但仍然存在相同的错误。