FOSRestBundle добавить базовую аутентификацию http


Я добавил FOSRestBundle в свое приложение symfony2, в этом приложении уже была общедоступная область и область администрирования, защищенная FOSUserBundle.

Моя проблема в том, что я не заставляю браузер запрашивать пользователя/пароль, а также при подключении api с curl Я не получаю разрешения.

# app/config/security.yml
providers:
    user:
        id: fos_user.user_provider.username
    administrator:
        entity: { class: App\UserBundle\Entity\Administrator, property: login }

Теперь я добавил область api и хочу использовать базовую аутентификацию http, поэтому добавил нового поставщика

    api_provider:
        memory:
            users:
                user1: { password: 1234, roles: 'ROLE_API_USER' }
                user2: { password: 1234, roles: 'ROLE_API_USER' }

И новый брандмауэр:

firewalls:
    backend:
        pattern:        ^/admin/
        provider:       administrator
        anonymous:      ~
        form_login:
            login_path: /admin/login
            check_path: /admin/login_check
        logout:
            path:       /admin/logout
            target:     /admin/
    api:
        pattern:  ^/api/
        provider: api_provider
        anonymous: ~
        # form_login: false # <- needed or not?
        http_basic:
            realm: "Api"
    main:
        pattern: ^/
        form_login:
            login_path: /login
            check_path: /login_check
            provider: user
            csrf_provider: form.csrf_provider
        logout:       true
        anonymous:    true

В этот момент я начинаю получать 403 - Forbidden, поэтому, если я добавлю это так security.yml:

access_control:
    - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/user, role: ROLE_ADMIN_USUARIOS }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/error, role: ROLE_USER }
    - { path: ^/api/, role: ROLE_API_USER }
    - { path: ^/api/v1/users, role: ROLE_API_USER }

После этого я получаю 401 - unauthorized.

Я подумал, что http basic auth заставил браузер запрашивать пользователя/пропуск, чего не происходит. Хотя, что мне, наконец, понадобится, так это сервер, который будет принимать базовый заголовок аутентификации в http-запросах, таких как этот.

Я что-то упускаю?

Спасибо

Author: sinsuren, 2014-07-26

1 answers

РЕШЕНИЕ

По-видимому, единственный способ вызвать эти URL-адреса сейчас - это подключение через http, например curl добавление заголовка авторизации, например:

curl -u "user:pass" "http://example.com/app_dev.php/api/v1/users/1.json"

Доступ через браузер не запрашивает пользователя/пропуск.

Кроме того, для правильной работы нового провайдера требовался кодировщик:

# app/config/security.yml
encoders:
    Symfony\Component\Security\Core\User\User: plaintext
 3
Author: K. Weber, 2014-07-27 08:05:10