Saya mencoba mengautentikasi terhadap server ldap menggunakan symfony 4.2 dan LdapUserProvider-nya tetapi saya mendapatkan kesalahan berikut

[2019-08-09 17:40:52] security.DEBUG: Cannot refresh token because user has changed. {"username":"admin","provider":"Symfony\\Component\\Security\\Core\\User\\LdapUserProvider"} []
[2019-08-09 17:40:52] security.DEBUG: Token was deauthenticated after trying to refresh it. [] []
[2019-08-09 17:40:52] security.INFO: Populated the TokenStorage with an anonymous Token. [] []
[2019-08-09 17:40:52] security.DEBUG: Access denied, the user is not fully authenticated; redirecting to authentication entry point. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\AccessDeniedException(code: 403): Access Denied. 

Saya menemukan bahwa kata sandi pengguna yang diperbarui sulit dikodekan ke nol di ldapProvider. Pengguna yang diperbarui ini kemudian dievaluasi tidak sama dengan pengguna token dan ini menghasilkan deautentifikasi pengguna.

vendor/symfony/security-core/User/LdapUserProvider.php:

    public function refreshUser(UserInterface $user)
    {
        if (!$user instanceof User) {
            throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user)));
        }

        return new User($user->getUsername(), null, $user->getRoles());
    }

vendor/symfony/security-http/Firewall/ContextListener.php:

try {
                $refreshedUser = $provider->refreshUser($user);
                $newToken = clone $token;
                $newToken->setUser($refreshedUser);
...
}

Bagaimana saya bisa menyelesaikan masalah ini?

Terima kasih

-1
yowaiOtoko 9 Agustus 2019, 19:17

1 menjawab

Jawaban Terbaik

Masalah ini telah diperbaiki di symfony 4.4, di symfony/src/Symfony/Component/Ldap/Security/LdapUserProvider.php

Kata sandi tidak disetel ke nol lagi

public function refreshUser(UserInterface $user)
    {
        if (!$user instanceof LdapUser) {
            throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user)));
        }
        return new LdapUser($user->getEntry(), $user->getUsername(), $user->getPassword(), $user->getRoles());
    }
0
yowaiOtoko 12 Agustus 2019, 11:48