gpt4 book ai didi

php - Symfony 身份验证提供程序

转载 作者:可可西里 更新时间:2023-11-01 12:39:16 25 4
gpt4 key购买 nike

我正在使用 fr3d/ldap-bundle。如果用户不在数据库中,它会让我登录并从 AD 导入用户。没关系。

尽管有 AD 用户,但我也有本地用户,它们在我的数据库中。有一个特殊的列 authType 说明用户应该如何进行身份验证 - 通过 LDAP 或 native ( FOS )。我已经创建了自己的用户提供程序:

public function chooseProviderForUsername($username)
{
if($user->getAuthType() == User::LOGIN_LDAP) {
$this->properProvider = $this->ldapUserProvider;
} elseif($user->getAuthType() == User::LOGIN_NATIVE) {
$this->properProvider = $this->fosUserProvider;
} else {
throw new InvalidArgumentException('Error');
}
}

public function loadUserByUsername($username)
{
return $this->chooseProviderForUsername($username)->loadUserByUsername($username);
}

问题:链提供者不是一个选项 - 它允许用户使用他的 LDAP 密码和他的本地密码登录!这是一个很大的安全问题。

有没有办法根据数据库字段通过不同的身份验证提供程序登录用户?

编辑:

我的安全.yml:

 providers:
fos_userbundle:
id: fos_user.user_provider.username
appbundle_user_provider:
id: appbundle.user_provider
fr3d_ldapbundle:
id: fr3d_ldap.security.user.provider

firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin:
pattern: ^/admin.*
context: user
fr3d_ldap: ~
form_login:
provider: appbundle_user_provider
csrf_provider: security.csrf.token_manager
always_use_default_target_path: true
default_target_path: admin_main
login_path: /admin/login
check_path: /admin/login_check
logout:
path: /admin/logout
target: /admin/login
anonymous: true

这里是security.yml。此行 fr3d_ldap: ~ 启用 ldap 包,它授权 ldap 用户并将他们保存到我的数据库中。没有它我无法授权他们,可能我必须编写自定义 AuthenticationProvider。

最佳答案

我对 ldap 不是很熟悉,但我建议尝试完全手动登录

  $token = new UsernamePasswordToken($user, null, "firewallname", $user->getRoles());
$securityContext = $this->container->get('security.context');
$securityContext->setToken($token);

然后您可以自己手动进行检查,并根据检查结果决定在进行身份验证之前如何验证用户。例如,在执行此登录代码或其他任何内容之前,根据用户名和密码运行查询,具体取决于您想要的数据库字段。

关于php - Symfony 身份验证提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732835/

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