我正在努力替换LdapUserProvider。
我创建了自己的提供程序(基于LdapUserProvider的App \ Security \ MyLdapUserProvider,但检索了更多信息)和我自己的UserInterface(App \ Security \ MyUser),具有更多的属性来存储数据。
最后,我要检索用户的组和displayName。
这是我的配置:
services.yaml:
# add more service definitions when explicit configuration is needed
# please note that last definitions always *replace* previous ones
Symfony\Component\Ldap\Ldap:
arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
arguments:
- host: 10.106.1.1
port: 389
#encryption: tls
options:
protocol_version: 3
referrals: false
security.yaml:
providers:
#in_memory: { memory: ~ }
my_ldap:
ldap:
service: Symfony\Component\Ldap\Ldap
base_dn: "dc=XXXXXX,dc=com"
search_dn: "CN=XXXXXXXXXX,OU=LDAP,OU=Services Accounts,OU=Administration,DC=XXXXXXXXX,DC=com"
search_password: "ergergergergerg"
default_roles: ROLE_USER
filter: "({uid_key}={username})"
uid_key: samAccountName
#password_attribute: displayName
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
security: true
anonymous: true
provider: my_ldap
form_login_ldap:
login_path: /login
check_path: /login
service: Symfony\Component\Ldap\Ldap
dn_string: 'dc=XXXXXX,dc=com'
query_string: '(samAccountName={username})'
logout:
path: /logout
target: /
我在哪里可以告诉安全提供程序使用我自己的ldap提供程序而不是默认提供程序?
Symfony流程对我来说仍然有点复杂,所以如果有人可以花些时间来解释。.
Symfony文档是CustomUserProvider> Ldap配置> CustomeUSerProvider ...之间重定向的无穷循环。
答案 0 :(得分:3)
如文档章节Creating A Custom User Provider中所述,您需要在security.providers
下将您的用户提供程序添加为新密钥,并将其配置为id
。
此id
是您的自定义用户提供程序服务的名称,在新版本的symfony中,它等于FQCN。
# security.yaml
security:
providers:
# the name of your user provider can be anything
my_ldap_provider:
id: 'App\Security\MyLdapUserProvider'
然后,您可以将此提供程序用于以下防火墙之一:
security:
# [..]
firewalls:
main:
pattern: '^/'
provider: 'my_ldap_provider'
Symfony的LdapUserProvider
看起来像这样:
class LdapUserProvider implements UserProviderInterface
{
private $ldap;
private $baseDn;
private $searchDn;
private $searchPassword;
private $defaultRoles;
private $uidKey;
private $defaultSearch;
private $passwordAttribute;
private $extraFields;
public function __construct(
LdapInterface $ldap,
string $baseDn,
string $searchDn = null,
string $searchPassword = null,
array $defaultRoles = [],
string $uidKey = null,
string $filter = null,
string $passwordAttribute = null,
array $extraFields = []
)
{
要创建正确扩展MyLdapUserProvider
的{{1}}服务,您需要这样的服务定义:
LdapUserProvider