У меня проблема с функцией Symfony. Когда я выдаю себя за пользователя и звоню своему API, пользователь не является имитатором.
Вот мой конфиг безопасности:
api:
pattern: ^/api/.*
provider: fos_userbundle
guard:
authenticators:
- app.wsse_authenticator
- app.form_login_authenticator
entry_point: app.wsse_authenticator
logout: true
stateless: true
anonymous: true
switch_user: true
context: my_context
main:
pattern: ^/.*
provider: fos_userbundle
guard:
authenticators:
- app.form_login_authenticator
switch_user: true
logout: true
anonymous: true
remember_me:
secret: "%secret%"lifetime: 7200 # in seconds (=12h)
always_remember_me: true
context: my_context
Я пытался использовать один и тот же контекст, чтобы разделить подражающего пользователя между обоими брандмауэрами, но это не работает.
Когда сделать запрос на /test
олицетворенный пользователь используется, но когда я делаю запрос на /api/test
пользователь — это я, а не подражатель.
Кто-то может мне помочь?
Я верю, что то, что вы пытаетесь сделать, не будет работать так, как вы этого хотите.
API
брандмауэр есть stateless
Это означает, что нет session
участвует в аутентификации. Обычно с REST API
Вы отправляете TOKEN
с вашим запросом через настройку header
или как часть запроса — http://localhost/api/users?apiKey=my_key_goes_here
как вы проходите проверку подлинности
С другой стороны, в main
межсетевой экран аутентификация осуществляется через сеанс. Учетные данные для аутентификации (т.е. UserToken
) хранятся в session
и затем они используются каждый раз, когда пользователь делает запрос на URL вашего сайта.
Иметь context
сработало бы, если бы оба firewalls
мы session
основан. В этом конкретном случае методы аутентификации просто несовместимы, поэтому вы не можете просто нажать на Symfony development tool bar
а также impersonate
другой пользователь.
Делать простой поиск в packagist я нашел SwitchUserStatelessBundle что может быть то, что вы ищете.
Других решений пока нет …