Tembok api berbilang meningkatkan keselamatan dalam Symfony 5.4
<p>Saya cuba mengasingkan pengesahan pengguna daripada pengesahan pentadbir. </p>
<p>Jadi saya mencipta 2 tembok api dan 2 kawalan akses berbeza. </p>
<p>Fail security.yaml saya adalah seperti berikut:</p>
<pre class="brush:php;toolbar:false;">enable_authenticator_manager: true
password_hashers:
SymfonyComponentSecurityCoreUserPasswordAuthenticatedUserInterface: 'auto'
pembekal:
owner_authentication:
entiti:
kelas: AppEntityMerchantOwner
harta: emailAddress
pengesahan_pengguna:
entiti:
kelas:AppEntityUserUser
harta: emailAddress
tembok api:
dev:
corak: ^/(_(profiler|wdt)|css|imej|js)/
keselamatan: palsu
pengguna:
malas: betul
corak: ^/admin/login/
pembekal: pengesahan_pengguna
user_checker: AppSecurityAuthentificableModelChecker
borang_log masuk:
pembekal: pengesahan_pengguna
default_target_path: app.dashboard.index
use_referer: benar
use_forward: palsu
laluan_log masuk: app.authorization.admin_login
check_path: app.authorization.admin_login
nama pengguna_parameter: log masuk[emailAddress]
kata laluan_parameter: log masuk[kata laluan]
log keluar:
laluan: app.authorization.logout
sasaran: app.authorization.admin_login
utama:
malas: betul
corak: ^/
pembekal: owner_authentication
user_checker: AppSecurityAuthentificableModelChecker
borang_log masuk:
pembekal: owner_authentication
default_target_path: app.dashboard.index
use_referer: benar
use_forward: palsu
login_path: app.authorization.login
check_path: app.authorization.login
nama pengguna_parameter: log masuk[emailAddress]
kata laluan_parameter: log masuk[kata laluan]
log keluar:
laluan: app.authorization.logout
sasaran: app.authorization.login
access_control:
- { laluan: ^/admin/log masuk, peranan: PUBLIC_ACCESS}
- { laluan: ^/log masuk, peranan: PUBLIC_ACCESS }
- { laluan: ^/, peranan: ROLE_USER }</pre>
<p>Semuanya berfungsi dengan baik pada tembok api utama, tetapi apabila saya menggunakan butang hantar tembok api pengguna (pentadbir), halaman log masuk menyegarkan dirinya sendiri dan kemudian tiada apa yang berlaku. Saya tidak mendapat sebarang kesilapan. </p>
<p>** Jika saya menambah log masuk pengguna (admin) pada tembok api utama, maka /admin/login berfungsi dengan baik dan yang satu lagi tidak lagi berfungsi. </p>
<p>Apabila saya memanggil <code>$authenticationUtils->getLastAuthenticationError()</code>, saya tidak mendapat sebarang ralat. Tetapi pengesahan juga tidak berfungsi.</p>
<p>Beginilah rupa pengawal saya:</p>
<pre class="brush:php;toolbar:false;">public function adminLogin(AuthenticationUtils $authenticationUtils): Respons
{
if ($this->getUser()) {
kembalikan $this->redirectToRoute('app.dashboard.index');
}
$loginForm = $this->createForm(LoginType::class, ['emailAddress' => $authenticationUtils->getLastUsername()]);
kembalikan $this->renderForm('app/pages/authorization/admin_login.html.twig', [
'title' => 'Log masuk',
'login_form' =>
'error' => $authenticationUtils->getLastAuthenticationError()?->getMessageKey(),
]);
}</pre>
<p>Ini adalah masalah yang sama yang dialami seseorang: https://grafikart.fr/forum/35234, tetapi saya tidak menemui sebarang penyelesaian. </p>