複数のファイアウォールにより Symfony 5.4 のセキュリティが向上
P粉952365143
P粉952365143 2023-08-26 16:14:30
0
1
580
<p>ユーザーの認証を管理者の認証から分離しようとしています。 </p> <p>そこで、2 つのファイアウォールと 2 つの異なるアクセス制御を作成しました。 </p> <p>私の security.yaml ファイルは次のとおりです:</p> <pre class="brush:php;toolbar:false;">enable_authenticator_manager: true パスワードハッシュ: Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' プロバイダー: 所有者認証: 実在物: クラス: App\Entity\Merchant\Owner プロパティ: 電子メールアドレス ユーザ認証: 実在物: クラス: アプリ\エンティティ\ユーザー\ユーザー プロパティ: 電子メールアドレス ファイアウォール: 開発者: パターン: ^/(_(プロファイラー|wdt)|css|画像|js)/ セキュリティ: false ユーザー: 怠け者:本当 パターン: ^/admin/login/ プロバイダー: user_authentication user_checker: App\Security\AuthenticableModelChecker フォームログイン: プロバイダー: user_authentication デフォルトのターゲットパス: app.dashboard.index use_referer: true use_forward: false ログインパス: app.authorization.admin_login check_path: app.authorization.admin_login username_parameter: ログイン[メールアドレス] パスワードパラメータ: ログイン[パスワード] ログアウト: パス: app.authorization.logout ターゲット: app.authorization.admin_login 主要: 怠け者:本当 パターン: ^/ プロバイダー: owner_authentication user_checker: App\Security\AuthenticableModelChecker フォームログイン: プロバイダー: owner_authentication デフォルトのターゲットパス: app.dashboard.index use_referer: true use_forward: false ログインパス: app.authorization.login check_path: app.authorization.login username_parameter: ログイン[メールアドレス] パスワードパラメータ: ログイン[パスワード] ログアウト: パス: app.authorization.logout ターゲット: app.authorization.login アクセス制御: - { パス: ^/admin/login、ロール: PUBLIC_ACCESS} - { パス: ^/login、ロール: PUBLIC_ACCESS } - { パス: ^/、ロール: ROLE_USER }</pre> <p>メインのファイアウォールではすべて正常に動作しますが、ユーザー (管理者) のファイアウォールの送信ボタンを使用すると、ログイン ページが自動的に更新され、何も起こりません。エラーは発生しません。 </p> <p>** メイン ファイアウォールにユーザー (管理者) ログインを追加すると、/admin/login は正常に動作しますが、もう 1 つは動作しなくなります。 </p> <p><code>$authenticationUtils->getLastAuthenticationError()</code> を呼び出しても、エラーは発生しません。しかし、検証も機能しません。</p> <p>これが私のコントローラーの外観です: </p> <pre class="brush:php;toolbar:false;">public function adminLogin(AuthenticationUtils $authenticationUtils): 応答 { if ($this->getUser()) { return $this->redirectToRoute('app.dashboard.index'); } $loginForm = $this->createForm(LoginType::class, ['emailAddress' => $authenticationUtils->getLastUsername()]); return $this->renderForm('app/pages/authorization/admin_login.html.twig', [ 'タイトル' => 'ログイン', 'login_form' => $loginForm, 'error' => $authenticationUtils->getLastAuthenticationError()?->getMessageKey(), ]); }</pre> <p>これはある人が抱えていた問題と同じです: https://grafikart.fr/forum/35234 ですが、解決策は見つかりませんでした。 </p>
P粉952365143
P粉952365143

全員に返信(1)
P粉041881924

ついに答えを見つけたので、ここに投稿します: https://stackoverflow.com/a/42352112/8003007 必要なのは、両方のファイアウォールに context: my_context を追加することだけです。

これは、Symfony の公式ドキュメントや現在の Symfony ドキュメントには登場せず、Symfony 3.4 などの以前のバージョンにのみ登場するため、識別するのが難しいオプションです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート