2016-11-21 2 views
1
nicht

In einem Projekt mit Symfony 2.8.14 Ich habe eine sehr grundlegende Setup verwenden in Symfony grundlegende HTTP-Authentifizierung zu ermöglichen, wie in http://symfony.com/doc/2.8/security.htmlSymfony grundlegende HTTP-Authentifizierung arbeitet

security.yml

beschrieben
security: 

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

    providers: 
     in_memory: 
      memory: 
       users: 
        myuser: { password: mypassword, roles: 'ROLE_USER' } 

    firewalls: 
     default: 
      anonymous: ~ 
      http_basic: ~ 

    access_control: 
     - { path: ^/myroute, roles: ROLE_USER } 

Wenn ich auf meinem lokalen Server auf /myroute zugreife, werde ich mit der HTTP-Basisauthentifizierung aufgefordert. Nach der Eingabe der korrekten Zugangsdaten wird die Aufforderung jedoch immer angezeigt.

Auf einem Remote-Server wird nach der Eingabe der korrekten Anmeldeinformationen eine unbegrenzte "Weiterleitung" zur gleichen Route mit einem 401 Statuscode erfolgen.

Beide Server betreiben Apache 2.4 mit PHP über FastCGI. Es gibt noch andere Themen

# Sets the HTTP_AUTHORIZATION header removed by apache 
RewriteCond %{HTTP:Authorization} . 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

zum /web/.htaccess aufgrund eines spezifischen Problems mit Apache mit PHP über FastCGI hinzufügen hindeutet. Dies ist jedoch bereits in die symfony/standard-edition integriert (und ist auch in meiner .htaccess vorhanden).

Ich weiß nicht, was ich noch versuchen sollte.

Antwort

2

Einer der Hinweise auf http://php.net/manual/en/features.http-auth.php vorschlug Hinzufügen dieses:

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 

Das half. Es scheint der Standard .htaccess Konfig der symfony/standard-edition ist nicht genug (zumindest in einigen Umgebungen).

1

Versuchen Sie diese unter Firewalls angeben:

firewalls: 
    default: 
     pattern:  ^/myroute 
     anonymous: false 
     provider: in_memory 

Hope this Hilfe

+0

Ich habe das vorher versucht, aber nein, es hat nicht geholfen. – fritzmg

0

Sie haben, dies zu tun (neue Linie gehen)

providers: 
    in_memory: 
     memory: 
      users: 
       myuser: 
        { password: mypassword, roles: 'ROLE_USER' } 

oder Sie können auch das Array wie diese

providers: 
    in_memory: 
     memory: 
      users: 
       myuser: 
        password: mypassword 
        roles: 'ROLE_USER' 

Ansonsten myuser explose wird als String mit dem Wert „betrachtet {Passwort : mypassword, Rollen: 'ROLE_USER'} "

+0

Nein, Sie müssen keine neue Zeile erstellen, wenn Sie die geschweiften Klammern verwenden. Das Problem war etwas ganz anderes (siehe Antwort). – fritzmg

+0

Ich habe es gestern selbst versucht und es hat nicht funktioniert, bis ich eine neue Zeile eingefügt habe! – OlivierC

+0

Muss ein anderes Problem gewesen sein. Neue Zeilen sind in YAML nicht erforderlich, wenn Klammern verwendet werden: https://symfony.com/doc/current/components/yaml/yaml_format.html – fritzmg