2014-09-10 58 views
3

我有兩個防火牆,一個用於我的API調用(WSSE安全),一個用於我的應用程序。兩者都能正常工作,但我需要在api防火牆上驗證用戶身份,同時在應用程序防火牆上進行身份驗證,但我無法做到這一點。Symfony2如何使用兩種不同的方法在兩個不同的防火牆上驗證用戶?

我security.yml

firewalls: 
    # Firewall for the api 
    wsse_secured: 
     pattern: ^/api/.* 
     wsse: 
      nonce_dir: null 
      lifetime: 300 
      provider: fos_userbundle 
     context: user 

    # Firewall for the application 
    main: 
     pattern: /.* 
     form_login: 
      provider: fos_userbundle 
      login_path:  fos_user_security_login 
      check_path:  fos_user_security_check 
      default_target_path: espace_perso 
      always_use_default_target_path: false 
      failure_path: fos_user_security_login 
     logout: 
      path: fos_user_security_logout 
      target: fos_user_security_login 
     oauth: 
      resource_owners: 
       facebook: "/login/check-facebook" 
       linkedin: "/login/check-linkedin" 
       google: "/login/check-google" 
      login_path: fos_user_security_login 
      oauth_user_provider: 
       service: bg.oauth.user_provider 
     anonymous: true 
     context: user 

我已經看過其他職位(this questionthis onethis one),正如你所看到的,添加上下文並不在我的情況下工作。

我嘗試手動添加我需要的wsse頭文件,或者爲我的用戶創建一個新的WsseToken,但沒有成功。

我真的需要幫助的這個問題必須是普通...

+0

Wsse通過cookie通過HTTP頭和form_login進行管理。你如何試圖訪問你的API? – rolebi 2014-09-10 14:05:17

+0

我像你說的那樣通過HTTP頭訪問我的API。例如,我在我的「主」防火牆後面有一個表單,但此表單的行爲在我的「wsse_secured」防火牆後面。所以當我點擊「驗證」時,「wsse_secured」防火牆給我一個403,因爲我沒有在這個防火牆上進行身份驗證。 – 2014-09-10 14:18:29

回答

0

據我瞭解,你想重用你的API中的動作要由用戶訪問。如果沒有,請提供一些更多細節。

最好的事情就是在不同的防火牆下爲同一個動作製作另一條路由。

假設你有:

<route id="api_form_validate" pattern="/api/validate-form"> 
    <default key="_controller">Bundle:ApiController:validateForm</default> 
</route> 

地址:

<route id="user_form_validate" pattern="/user/validate-form"> 
    <default key="_controller">Bundle:ApiController:validateForm</default> 
</route> 

而改變形式的行動從api_form_validateuser_form_validate

+0

是的,這是我的解決方案,但我不想有多個重複路線。我改變了我的身份驗證方法,現在這很好。感謝您的回答 :) – 2014-09-29 12:25:47

相關問題