2016-02-24 43 views
1

我有一個API用於驗證用戶,這要感謝他們在每個HTTP請求中發送的密鑰。我的防火牆配置是事遂所願:Symfony2可選的無狀態身份驗證

firewalls:   
    authentication_required: 
    stateless: true 
    simple_preauth: 
     authenticator: my_authenticator 
    provider: my_provider 

對於一些網址,我允許匿名用戶,繞過防火牆的配置使用security: false認證。它看起來像:

firewalls:   
    authentication_not_required: 
    stateless: true 
    security: false 

現在,我想爲匿名用戶訪問一些URL,但保留爲現有用戶進行身份驗證的可能性。防火牆的配置看起來類似的東西,但很明顯,這是行不通的:

firewalls:   
    my_area: 
    stateless: true 
    security: false 
    simple_preauth: 
     authenticator: my_authenticator 
    provider: my_provider 

難道有人在如何做到這一點的想法?

回答

1

解決的辦法是添加anonymous: ~由帕維爾Mikołajczuk的建議,以及修改認證器在必要時繞過它,如在symfony的食譜這裏描述:http://symfony.com/doc/current/cookbook/security/api_key_authentication.html#only-authenticating-for-certain-urls

以我的情況下,我通過一個允許匿名路徑到ApiKeyAuthenticator服務的數組,然後在其createToken()函數的開始處,檢查當前路徑是否被允許進行匿名訪問。

它看起來是這樣的:〜`在我的情況:

// Allow some specific paths to have both anonymous and authenticated users 
if (!$request->headers->has('X-Api-Key')) { 
    foreach ($this->allowedAnonymousPaths as $path) { 
     if ($this->httpUtils->checkRequestPath($request, $path)) { 
      return; 
     } 
    } 
} 
1

anonymous: ~是你的事。

firewalls:   
    my_area: 
     stateless: true 
     anonymous: ~ 
     simple_preauth: 
      authenticator: my_authenticator 
     provider: my_provider 
+0

謝謝你,它不僅以'匿名工作。我還修改了我的身份驗證器以執行對路徑的檢查,如Symfony Cookbook中所述,並且以這種方式運行:http://symfony.com/doc/current/cookbook/security/api_key_authentication.html#only-authenticating -for-certain-urls。 – Seb

+1

我無法知道您的身份驗證器的外觀/作品。 –