Конфигурация брандмауэра FOSbundle + FOSOAuthServerBundle

Я работаю над проектом Symfony 2.7, в котором есть как веб-интерфейс входа, так и аутентификация OAuth для API. Я использую FOSUserBundle для провайдера аутентификации и FOSOAuthServerBundle для обеспечения функциональности OAuth.

Я следую руководству, связанному с этим сообщением, для реализации OAuth с FOSOauthServerBundle FOSOAuthServerBundle с FOSUserBundle — как заставить его работать?

Я думаю, что почти готов, но проблема с безопасностью блокирует меня. Я установил брандмауэры в моем файле securtiy.yml следующим образом.

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4
            login_path:          fos_user_security_login
            check_path:          fos_user_security_check
            #default_target_path: app_website_index
        logout:       true
        anonymous:    true
        logout:
              path: fos_user_security_logout
              #target: index
              target: fos_user_security_login

    oauth_token:
                pattern:    ^/oauth/v2/token
                security:   false

    oauth_authorize:
        pattern:    ^/oauth/v2/auth
        # Add your favorite authentication process here
        form_login:
             provider: fos_userbundle
             csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4
             login_path:          fos_user_security_login
             check_path:          fos_user_security_check
             #default_target_path: app_website_index

    api:
        pattern:    ^/api
        fos_oauth:  true
        stateless:  true
        anonymous:  false # can be omitted as its default value

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }

Проблема в том, что API и брандмауэры OAuth находятся под основным ^/, поэтому он напоминает мне о странице входа, когда я пытаюсь получить доступ к localhost: 8000/api/articles без входа в систему, вместо того, чтобы дать мне ошибку аутентификации OAuth :

{"error":"access_denied","error_description":"OAuth2 authentication required"}

Например.

Или, когда у меня есть токен доступа, когда я пытаюсь получить доступ к таким ресурсам, как:

http://localhost:8000/app.php/api/article/?access_token=THISISMYACCESSTOKEN

Я получаю fos_login вместо ресурсов.

Если я изменю основной брандмауэр на ^/secured/, все будет работать нормально, но у меня возникнут проблемы с веб-аутентификацией.

Все контроллеры моего приложения находятся по пути /secured/, поэтому изменить основной брандмауэр это не проблема, если я позволю незащищенной форме брандмауэра шаблон ^/ несколько ошибок сформировать FOSUserBundle. Должен ли я создать специальный брандмауэр для операций входа/входа_проверки/выхода из системы и поместить основной брандмауэр из /secured/ или есть другой способ исключить брандмауэры OAuth и API из основного брандмауэра?


person groot    schedule 15.06.2015    source источник


Ответы (1)


Довольно старый вопрос, но я думаю, что это было связано с этой строкой:

- { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] }

Независимо от того, что вы вызываете с помощью "http://localhost:8000/app.php/api/...", вы будете перенаправлены на страницу авторизации.

person Olivier    schedule 21.05.2016