다중 방화벽으로 Symfony 5.4의 보안이 향상되었습니다.
P粉952365143
P粉952365143 2023-08-26 16:14:30
0
1
617
<p>사용자 인증과 관리자 인증을 분리하려고 합니다. </p> <p>그래서 방화벽 2개와 서로 다른 액세스 제어 2개를 만들었습니다. </p> <p>내 security.yaml 파일은 다음과 같습니다:</p> <pre class="brush:php;toolbar:false;">enable_authenticator_manager: true 비밀번호_해셔: SymfonyComponentSecurityCoreUserPasswordAuthenticatedUserInterface: '자동' 공급자: 소유자_인증: 실재: 클래스: AppEntityMerchantOwner 속성: emailAddress 사용자 인증: 실재: 클래스: AppEntityUserUser 속성: emailAddress 방화벽: 개발자: 패턴: ^/(_(profiler|wdt)|css|images|js)/ 보안: 거짓 사용자: 게으르다 : 사실 패턴: ^/admin/login/ 공급자: user_authentication user_checker: AppSecurityAuthentificableModelChecker 양식_로그인: 공급자: user_authentication default_target_path: app.dashboard.index use_referer: 사실 use_forward: 거짓 login_path: app.authorization.admin_login check_path: app.authorization.admin_login 사용자 이름_파라미터: 로그인[이메일 주소] 비밀번호_매개변수: 로그인[비밀번호] 로그 아웃: 경로: app.authorization.logout 대상: app.authorization.admin_login 기본: 게으른: 사실 패턴: ^/ 공급자: owner_authentication user_checker: AppSecurityAuthentificableModelChecker 양식_로그인: 공급자: owner_authentication default_target_path: app.dashboard.index use_referer: 사실 use_forward: 거짓 login_path: app.authorization.login check_path: app.authorization.login 사용자 이름_파라미터: 로그인[이메일 주소] 비밀번호_매개변수: 로그인[비밀번호] 로그 아웃: 경로: app.authorization.logout 대상: app.authorization.login 액세스 제어: - { 경로: ^/admin/login, 역할: PUBLIC_ACCESS} - { 경로: ^/로그인, 역할: PUBLIC_ACCESS } - { 경로: ^/, 역할: ROLE_USER }</pre> <p>기본 방화벽에서는 모든 것이 잘 작동하지만 사용자(관리자) 방화벽 제출 버튼을 사용하면 로그인 페이지가 자동으로 새로 고쳐지고 아무 일도 일어나지 않습니다. 오류가 발생하지 않습니다. </p> <p>** 기본 방화벽에 사용자(관리자) 로그인을 추가하면 /admin/login은 제대로 작동하고 다른 로그인은 더 이상 작동하지 않습니다. </p> <p><code>$authenticationUtils->getLastAuthenticationError()</code>를 호출하면 오류가 발생하지 않습니다. 그러나 유효성 검사도 작동하지 않습니다.</p> <p>내 컨트롤러는 다음과 같습니다.</p> <pre class="brush:php;toolbar:false;">공개 함수 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' => '오류' => $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 3.4와 같은 이전 버전에만 나타나기 때문에 식별하기 어려운 옵션입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿