【发布时间】:2015-08-24 07:37:46
【问题描述】:
我正在使用fr3d/ldap-bundle。如果他们不在数据库中,它会让我登录并从 AD 导入用户。没关系。
尽管有 AD 用户,但我也有本地用户,它们在我的数据库中。有一个特殊的列 authType 说明了用户应该如何被认证——通过 LDAP 或本机( 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 密码和他的本地密码登录!这是一个很大的安全问题。
是否有办法通过不同的身份验证提供程序登录用户,具体取决于 db 字段?
编辑:
我的 security.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。
【问题讨论】:
-
你能解释一下“链提供者”吗?
-
我们能否查看您的 security.yml 文档,其中指定了提供者?
-
现在检查 - 我已经添加了。
标签: php symfony authentication ldap