Tembok api berbilang meningkatkan keselamatan dalam Symfony 5.4
P粉952365143
2023-08-26 16:14:30
<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>
Akhirnya, saya menemui jawapannya dan saya akan menyiarkannya di sini: https://stackoverflow.com/a/42352112/8003007 Apa yang perlu saya lakukan ialah menambah satu
context: my_context
pada kedua-dua tembok api.Ini adalah pilihan yang sukar dikenal pasti kerana ia tidak muncul dalam dokumentasi Symfony rasmi dan semasa, hanya dalam versi terdahulu, seperti Symfony 3.4.