Я искал соединение такого типа, но все пакеты не работают с Symfony Security 2.7 (Composer сообщает, что проблемы с пакетами) и Symfony 3.0.
Примечание: я на самом деле использую Silex Framework.
Я хочу вернуть истинный или ложный ответ, если пользователь подключен к активному каталогу.
У меня есть этот код для тестов:
$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=='),
),
),
),
));
Логин с админом & Фу работал, но это не то, что я хочу.
Я хочу заменить эту часть кода:
'users' => array(
// raw password is foo
'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='),
),
Или любые другие решения, чтобы заменить значение, которое позволяет пользователю обходить брандмауэр и вводить в приложение.
Замечания :
Я использую плагин adLDAP для проверки соединения с Active Directory (работает отлично).
Попробуй использовать 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
);
});
Или вы можете написать свой собственный пользовательский провайдер на основе 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(...)
);
});
Других решений пока нет …