Symfony Security: Auth с сеансом или oauth

Я разработал REST API, есть два способа подключения к нему: session и oauth. В принципе, мой сайт будет использовать режим сеанса, а стороннее программное обеспечение будет использовать режим oauth.

Мне удалось сделать так, чтобы режимы сеанса и oauth работали в symfony, но я не могу заставить их работать одновременно.

Вот моя конфигурация безопасности брандмауэров:

firewalls: auth_oauth_token: pattern: ^/auth/oauth/v2/token security: false api: pattern: ^/api anonymous: false fos_oauth: true stateless: true auth: pattern: ^/ anonymous: ~ form_login: login_path: /auth/session/check check_path: /auth/session/login always_use_default_target_path: true default_target_path: /auth/session/check failure_path: /auth/session/check failure_forward: false use_forward: false failure_forward: false username_parameter: username password_parameter: password post_only: true remember_me: false require_previous_session: false logout: path: /auth/session/logout target: /auth/session/logged_out invalidate_session: false 

Обработка сеанса: / auth / session. Управление OAuth: / auth / oauth. Api: / api.

Итак, с этой конфигурацией, сначала с брандмауэром «api», я могу войти в систему с токеном. Но даже вошел в систему с сеансом, если я не укажу токен, у меня не будет доступа.

Сначала с помощью брандмауэра «auth» я могу войти в систему с формой сеанса. Но даже если я укажу токен, у меня не будет доступа.

Я с ума схожу с этим. Я обнаружил, что при переполнении стека что-то о поставщиках цепочек, мне, вероятно, понадобится нечто вроде «брандмауэра цепи» … если это запрещено, проверьте другой брандмауэр.

спасибо

Я решил, дублируя маршруты контроллеров api, так что у меня есть /api/method route /api/method который опирается на OAuth2 и маршрут /webapi/method который зависит от стандартного (основного) брандмауэра:

В security.yml:

 firewalls: api: pattern: ^/api fos_oauth: true stateless: true oauth_token: pattern: ^/oauth/v2/token security: false main: pattern: ^/ form_login: provider: fos_userbundle csrf_provider: form.csrf_provider login_path: /login check_path: /login_check logout: true anonymous: true access_control: - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] } - { path: ^/web-api, roles: [ IS_AUTHENTICATED_FULLY ] } 

В routing.yml:

 acme_api: type: rest prefix: / resource: "@AcmeBundle/Resources/config/routing_api.yml" 

В routing_api.yml:

 # REST API - OAUTH Access acme_api_users: resource: AcmeBundle\Controller\UsersController type: rest defaults: {_format: json} prefix: /api name_prefix: api_ # REST API - Frontend Client Access acme_webapi_users: resource: AcmeBundle\Controller\UsersController type: rest defaults: {_format: json} prefix: /web-api name_prefix: webapi_