Symfony2 http_basic sikkerhet avviser gyldig legitimasjon

stemmer
12

Jeg bruker Symfony Standard 2.0.0BETA1 og prøvde å konfigurere http_basic autentisering nøyaktig det samme som i denne boka kapittel

security:
encoders:
    Symfony\Component\Security\Core\User\User: plaintext

providers:
    main:
        users:
            foo: { password: testing, roles: ROLE_USER }

firewalls:
    main:
        pattern:    /.*
        http_basic: true
        logout:     true

access_control:
    - { path: /.*, role: ROLE_USER }

Problemet er når jeg prøver å åpne en side, og jeg sender inn brukernavnet foo og passord testing det bare looper og spør meg for legitimasjons uendelig eller vise feilside.

Trinn for å reprodusere problemet:

  1. Kopier sikkerhetskonfigurasjonen fra http://symfony.com/doc/current/book/security/overview.html#configuration og forbi det å security.yml fil
  2. Refresh app hjemmeside
  3. Skriv inn gyldig legitimasjon

Forventet oppførsel er å se hjemmesiden, men i stedet legitimasjon spør vises.

Er det noen som vet hvorfor det skjer og hvordan å fikse det?

Publisert på 13/05/2011 klokken 08:25
kilden bruker
På andre språk...                            


5 svar

stemmer
7

Det samme problemet oppstår fremdeles i den gjeldende versjonen (Symfony versjon 2.1.8).

Det er på grunn av den spesielle måten at Apache + PHP som FastCGI håndterer HTTP auth variabler.

Minst, det fix for den gjeldende versjonen er litt simplier enn det var før (i forhold til @ Teo.sk svar), og instruksjonene er tilgjengelige direkte hardkodet som kommentarer i filen vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/ServerBag.phpav rammeverket:

/*
* php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default
* For this workaround to work, add these lines to your .htaccess file:
* RewriteCond %{HTTP:Authorization} ^(.+)$
* RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
*
* A sample .htaccess file:
* RewriteEngine On
* RewriteCond %{HTTP:Authorization} ^(.+)$
* RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
* RewriteCond %{REQUEST_FILENAME} !-f
* RewriteRule ^(.*)$ app.php [QSA,L]
*/

Kort sagt, å fikse det, er alt du trenger å gjøre for å legge til følgende linjer til .htaccessfilen i web/mappen på din søknad:

RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Ny info (2013-05-01) : Nå bruker jeg Symfony versjon 2.2.1 og for reparasjonen til å fungere jeg måtte legge til disse to linjer med kode rett under følgende linje web/.htaccess:

RewriteEngine On
Svarte 28/02/2013 kl. 01:17
kilden bruker

stemmer
7

Den enkle HTTP er brutt med PHP som CGI / FastCGI med Apache

Det er en løsning:

app_dev.php

if( !isset($_SERVER['PHP_AUTH_USER']) )
{
    if (isset($_SERVER['HTTP_AUTHORIZATION']) && (strlen($_SERVER['HTTP_AUTHORIZATION']) > 0))
    {
        list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
        if( strlen($_SERVER['PHP_AUTH_USER']) == 0 || strlen($_SERVER['PHP_AUTH_PW']) == 0 )
        {
            unset($_SERVER['PHP_AUTH_USER']);
            unset($_SERVER['PHP_AUTH_PW']);
        }
    }
}

web / .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

Kilde: symfony github saken

Svarte 05/10/2011 kl. 18:39
kilden bruker

stemmer
7

Problemet er at du begrenset tilgang til /.*, noe som betyr at alle veier, til bare brukere som har rollen ROLE_USER.

Si din innlogging banen /login, prøver brukeren tilgang til noen annen vei og er omdirigert til innloggings banen. Innloggings banen ( /login) vil bli matchet av tilgangskontroll mønster /.*. Brukeren vil da bli nektet tilgang fordi han ikke har den rollen ROLE_USER akkurat nå. Sikkerhetskomponenten vil omdirigere brukeren igjen til innloggingsskjemaet slik at han kan godkjenne for å få rollen, som er begrenset, og vil omdirigere brukeren til innloggingsskjemaet til å godkjenne og så videre.

Her er en enkel løsning for å unngå dette problemet. Du kan tillate tilgang til innloggingsskjemaet til anonym bruker med aktivering av den anonyme brukerkonfigurasjon og en ny adgangskontroll element. Legg dette nedenfor maini firewallskonfigurasjonen for å aktivere anonym bruker:

security:
    firewalls:
        main:
            anonymous: true

Og legge til en ny adgangskontroll element for å tillate anonym bruker å acces /loginmønster:

access_control:
    - { path: /login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: /.*, role: ROLE_USER }

Rekkefølgen er viktig her siden regelen er: første bane matchet vinner. Så /loginbanen må være over mønsteret for andre banen /.*. Dette bør løser du omdirigere loop.

Dokumentasjonen av Symfony om sikkerheten blir omskrevet akkurat nå, og vil snakke mer i detaljer om dette problemet. Det er i symfony-docs github depot under sikkerhet grenen.

Hilsen, Matt

Svarte 13/05/2011 kl. 18:05
kilden bruker

stemmer
1

du dont't trenger å endre SymfonyProject, trenger du også endre apache2 konfigurasjon.

sudoedit / etc / apache2 / sites-aktivert / [nettstedet] .conf

sett inn

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]

holde å starte apache2

Nyt :)

Svarte 23/02/2015 kl. 11:11
kilden bruker

stemmer
0

Jeg bruker min boundle rute:

 - { path: /correspondencia/recepcion/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
 - { path: /correspondencia/recepcion, role: ROLE_ADMIN }

uten den siste skråstreken feil

/correspondencia/recepcion/

flink

/correspondencia/recepcion
Svarte 04/12/2011 kl. 19:49
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more