2013-08-23 11 views
6

Mam obszar administracyjny z loginem, który zmuszamy do https: //. Naciśnięcie na trasę/admin powinno przekierować na stronę logowania, jeśli użytkownik nie jest zalogowany, ale otrzymuję nieskończoną pętlę przekierowań. Nie wiesz, co jest nie tak, tutaj jest security.yml:Pętla przekierowania śmierci w zabezpieczeniach Symfony2

firewalls: 
     admin_login: 
      pattern: ^/admin/secured/login$ 
      security: false 

     admin_secured_area: 
      pattern: ^/admin 
      provider: entity_admin 
      form_login: 
       check_path: /admin/secured/login_check 
       login_path: /admin/secured/login 
       default_target_path: /admin 
      logout: 
       path: /admin/secured/logout 
       target:/

    access_control: 
     - { path: ^/admin/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
     - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: https } 

Dzięki za pomoc!

+1

Czy próbowałeś usunąć admin_login? z sekcji zapory ogniowej? – ILikeTacos

+0

Cześć zgodnie z dokumentami potrzebuję admin_login, aby umożliwić anonimowym użytkownikom dostęp do formularza logowania. Próbowałem również usunąć i nadal przekierowuje. W każdym razie dzięki! – Acyra

+0

Podaj, które strony mają przekierować? –

Odpowiedz

3

Hi więc jest to związane ze sposobem Symfony2 $request->isSecure() sprawdza SSL, gdy strona jest w trakcie równoważenia obciążenia, istnieją pewne niespójne nazwy nagłówków w PHP. Plik konfiguracyjny musi być następujący:

trusted_proxies: [10.0.0.0/8] 

Teraz działa, ale nie wiem, czy istnieją problemy z bezpieczeństwem z tym ustawieniem.

+1

Na marginesie, musisz upewnić się, że przekazujesz poprawny nagłówek z serwera proxy. Symfony sprawdza, czy 'X_FORWARDED_PROTO' = 'https', 'on', 'ssl' lub '1'. Możesz zobaczyć tę zmienną przez var_dump $ _SERVER w app.php lub app_dev.php – DIMMSum

+0

Hi Decave, czy możesz rozwinąć swój komentarz? Jakiego kodu potrzebujemy, aby zapewnić prawidłowy nagłówek z serwera proxy? Dziękuję Ci! – Acyra

+1

Musisz skonfigurować swój serwer proxy, aby po otrzymaniu żądania od https z przeglądarki przekazywał zmienną '$ _SERVER' wskazującą, że otrzymała żądanie przez HTTPS. Czy wiesz, jak działa serwer proxy? Jeśli serwer proxy odbiera żądanie za pośrednictwem protokołu HTTPS, czasami przesyła to żądanie do serwera WWW przez http. W związku z tym serwer internetowy nie ma możliwości sprawdzenia, czy żądanie pochodziło z https, więc proxy musi przesłać zmienną '$ _SERVER' jako odniesienie. Zmienna '$ _SERVER' sprawdzana przez Symfony to' X_FORWARDED_PROTO'. Czy to ma sens? – DIMMSum

2

^/admin/secured/login_check powinien również zostać uwierzytelniony anonimowo, ponieważ użytkownicy nie będą mieli roli, gdy początkowo wywołują tę stronę, stąd pętla.

+0

Cześć dzięki za sugestię. Próbowałem tego i nadal nie działa. Ponadto nie ma wymogu anonimowych użytkowników podczas logowania się w dokumentach, a logowanie działa poprawnie, gdy nie wymusza https. Dzięki za sugestię. Nadal będę nad tym pracował! – Acyra

4

Po szybkim spojrzeniem Powiedziałbym, że coś takiego poniżej powinny być poprawne:

firewalls: 
    admin_secured_area: 
     pattern: ^/admin 
     provider: entity_admin 
     form_login: 
      check_path: /admin/secured/login_check 
      login_path: /admin/secured/login 
      default_target_path: /admin 
     logout: 
      path: /admin/secured/logout 
      target:/

access_control: 
    - { path: ^/admin/secured/(login|login_check|logout)$, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
    - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: https } 

W każdym razie, jeśli to nie pomoże, polecam sprawdzić przekierowania z wbudowanym profilera (kartach z meczów trasy i kłody), aby włączyć go do przekierowań zmienić config_dev.yml do:

web_profiler: 
    toolbar: true 
    intercept_redirects: true 
+0

Moje nagłówki w żądaniu miały ustawiony HTTPS, nawet jeśli faktycznie robi https ... problem był nginx config nie symfony, intercept_redirects: true ... pomógł mi go znaleźć .. – Drmjo

6

ma potrzeby sekcji „admin_login” w zaporach. Ale wygląda na to, że zapomniałeś anonimowy parametr ..

firewalls:  
     admin_secured_area: 
      anonymous: ~ 
      pattern: ^/admin 
      provider: entity_admin 
      form_login: 
       check_path: /admin/secured/login_check 
       login_path: /admin/secured/login 
       default_target_path: /admin 
      logout: 
       path: /admin/secured/logout 
       target:/

    access_control: 
     - { path: ^/admin/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 
     - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: https } 

Jak powiedziałem w moim komentarzu, czy ROLE_ADMIN rolę dla zalogowanych ustawić?

EDYCJA: Czy Twój kanał routingu obsługuje także kanał HTTPS w sekcji administratora?

+0

Cześć dzięki jeszcze raz za pomoc. Nie ma potrzeby ustawiania https w routingu, ponieważ ustawiliśmy go w access_control. – Acyra

+2

Miałem podobny problem i dla mnie pracowałem dodając "anonymous: ~" do "admin_secured_area". –

2

Usuń:

admin_login: 
      pattern: ^/admin/secured/login$ 
      security: false 
Powiązane problemy