2016-11-21 4 views
1

В проекте с использованием Symfony 2.8.14 Я использую очень простой настройки для разрешения базовой аутентификации HTTP в Symfony, как описано в http://symfony.com/doc/2.8/security.htmlSymfony базовой аутентификации HTTP не работает

security.yml

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 } 

При доступе к /myroute на моем локальном сервере мне предлагается базовое сообщение об ошибке HTTP. Однако после ввода правильных учетных данных он просто показывает мне подсказку.

На удаленном сервере после ввода правильных учетных данных будут бесконечные «перенаправления» на тот же маршрут с кодом состояния 401.

Оба сервера используют Apache 2.4 с PHP через FastCGI. Есть и другие темы, предполагающие добавить

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

к /web/.htaccess в связи с конкретной проблемой с Apache работает PHP через FastCGI. Однако это уже включено в symfony/standard-edition (и также присутствует в моем .htaccess).

Я не знаю, что еще попробовать.

ответ

2

Один из нот на http://php.net/manual/en/features.http-auth.php предложил добавить следующее:

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 

Это помогло. По умолчанию .htaccess конфигурации symfony/standard-edition недостаточно (по крайней мере, в некоторых средах).

1

Попробуйте указать это при брандмауэрах:

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

Надеется, что это поможет

+0

Я пробовал это раньше, но нет, это не помогло. – fritzmg

0

Вы должны это сделать (перейти на новую строку)

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

или вы также можете explose массив как этот

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

В противном случае MyUser рассматривается как строка со значением «{пароль : mypassword, role: 'ROLE_USER'} "

+0

Нет, вам не нужно делать новую строку, когда вы используете фигурные скобки. Проблема была совсем другая (см. Ответ). – fritzmg

+0

Я только что пробовал это сам вчера, и это не сработало, пока я не вставил новую линию! – OlivierC

+0

Должна быть какая-то другая проблема. Новые строки не требуются в YAML при использовании каких-либо скобок: https://symfony.com/doc/current/components/yaml/yaml_format.html – fritzmg

Смежные вопросы