2017-04-23 3 views
1

Ich habe ein Problem mit einer Funktion von Symfony. Wenn ich mich als Benutzer imitiere und ich meine API anrufe, ist der Benutzer nicht der Impersonate.Symfony imitieren einen Benutzer und mehrere Firewall

Hier ist meine Sicherheit config:

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 

Ich habe versucht, den gleichen Kontext zu verwenden, um die impersonate Benutzer zwischen den beiden Firewall zu teilen, aber es funktioniert nicht.

Wenn eine Anfrage auf /test der impersonate Benutzer wird verwendet, aber wenn ich eine Anfrage an /api/test bin der Benutzer bin ich und nicht die Identität.

Jemand könnte mir helfen?

Antwort

3

Ich glaube, dass das, was Sie versuchen zu tun, nicht so funktionieren würde, wie Sie es wollen.

Die API Firewall ist stateless, was bedeutet, dass kein session an der Authentifizierung beteiligt ist. In der Regel mit einem REST API senden Sie eine TOKEN mit Ihrer Anfrage über eine header oder als Teil der Anfrage - http://localhost/api/users?apiKey=my_key_goes_here, wie Sie authentifizieren.

Auf der anderen Seite in der main Firewall die Authentifizierung erfolgt über eine Sitzung. Die Authentifizierungsdaten (d. H. UserToken) werden in der a session gespeichert und dann jedes Mal verwendet, wenn der Benutzer eine URL auf Ihrer Website anfordert.

Eine context hätte funktioniert, wenn beide firewalls basierten. In diesem speziellen Fall sind die Authentifizierungsmethoden einfach inkompatibel, weshalb Sie nicht einfach auf den anderen Benutzer Symfony development tool bar und impersonate klicken können.

Mit einer einfachen Suche in packagist fand ich SwitchUserStatelessBundle das könnte was Sie suchen.

Verwandte Themen