でダイナミックドメインネームシステムを使用してLDAP上のユーザーのパスワードを確認するチェックすることができますが、はSF3 symfonyの3パスワードでsymfonyの3
dn_string: 'uid={username},dc=example,dc=com'
DN静的でだから私は
自分UserAuthenticationProviderクラスを作成した。しかし、今、私私のsecurity.ymlで宣言する方法を知らない?
のsecurity.yml
providers:
your_db_provider:
entity:
class: AcSecurityBundle:User
property: username
fos_userbundle:
id: fos_user.user_provider.username
secured_area:
pattern: ^/
anonymous: true
provider: your_db_provider
form_login:
csrf_token_generator: security.csrf.token_manager
use_referer: true
form_login_ldap:
service: ldap
use_referer: true
logout: true
AcSecurityBundle/AcUserAuthenticationProvider.php
クラスAcUserAuthenticationProviderは{
function checkAuthentication(UserInterface $user, UsernamePasswordToken $token)
{
$username = $token->getUsername();
$password = $token->getCredentials();
if ('' === $password) {
throw new BadCredentialsException('The presented password must not be empty.');
}
try {
$query = "(sAMAccountName=$username)";
$search_dn = "CN=app,OU=apps,DC=domain,DC=be";
$search_password = "mdp";
$this->ldap->bind($search_dn, $search_password);
$t = $this->ldap->query("OU=At,OU=user,DC=domain,DC=be", $query);
$entry = $t->execute();
if ($entry->count() > 0) {
$dn = $entry[0]->getDn();
}
$this->ldap->bind($dn, $password);
} catch (ConnectionException $e) {
throw new BadCredentialsException('The presented password is invalid.');
}
}
}
01 UserAuthenticationProvider延びありがとうございます
私はそれを正しく読むと、その実装を再考するでしょう。まず、認証のためにここで属性「sAMAccountName」を配線しています。これにより、認証プロバイダはADバックエンドでのみ使用可能になります。次に、$ entry-> count()が複数の場合はどうなりますか? – heiglandreas
はい私はADバックエンドを持っています。私のコードが動作します。これは心配ではありません。 symfonyが自分自身(ベンダー/ symfony/symfony/src/Symfony /コンポーネント/セキュリティ/コア/認証/プロバイダ/ LdapBindAuthenticationProvider.php)の代わりに1つを使用するように私のauthenficationプロバイダを宣言することです。 – Jsenechal
なぜあなたは独自の実装をロールバックしますか?デフォルトのシンフォニー・プロバイダとは何が違うのですか? – heiglandreas