gpt4 book ai didi

symfony - 如何在 Symfony 中扩展 LdapUserProvider 并使用自定义 LDAP 用户提供程序?

转载 作者:行者123 更新时间:2023-12-01 11:13:11 27 4
gpt4 key购买 nike

我正在努力更换 LdapUserProvider。

我创建了我自己的提供程序(基于 LdapUserProvider 但检索更多信息的 App\Security\MyLdapUserProvider)和我自己的用户界面(App\Security\MyUser),具有更多属性来存储数据。

最后我想检索用户的组和显示名称。

这是我的配置:

服务.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

安全.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 config > CustomeUserProvider... 之间重定向的无限循环。

最佳答案

如文档章节 Creating A Custom User Provider 中所述您需要在 security.providers 下添加您的用户提供商作为新 key 并配置它的 id .

id是您的自定义 User Provider 服务的名称 - 在 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扩展服务 LdapUserProvider正确地,您需要这样的服务定义:
# services.yaml

services:
App\Security\MyLdapUserProvider:
arguments:
$adminEmail: '%admin_email%'
$ldap: '@Symfony\Component\Ldap\Ldap'
$baseDn: 'dc=XXXXXX,dc=com'
$searchDn: 'CN=XXXXXXXXXX,OU=LDAP,OU=Services Accounts,OU=Administration,DC=XXXXXXXXX,DC=com'
$searchPassword: 'ergergergergerg'
$defaultRoles: ['ROLE_USER']
$filter: '({uid_key}={username})'
$uidKey: 'samAccountName'

关于symfony - 如何在 Symfony 中扩展 LdapUserProvider 并使用自定义 LDAP 用户提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57092961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com