2011-07-19 57 views
20

我爲Symfony2應用程序開發了一個REST API。這個api將被一個移動應用程序使用。大部分的功能在當前已驗證用戶的情況下進行,即:Symfony2 API驗證(適用於移動應用程序)

$this->container->get('security.context')->getToken()->getUser() 

我希望在移動應用程序將能夠發佈到登陸動作就像一個傳統的Web表單。如果證書被檢出,那麼Symfony2就是這樣做的,並設置了一個cookie(甚至可以在移動應用訪問api的環境中工作?)。然後,該手機的後續API請求(希望)將與本地symfony2 security.context服務容器一起工作。

會這樣嗎?在將API提供給移動開發人員之前,我需要弄清楚這個授權過程。如果可能的話,我顯然希望能夠使用本地security.context服務,而不是爲使用xAuth或類似API的api構建新的認證系統。

謝謝

回答

13

我認爲你應該做它無狀態(沒有cookie)。

我有同樣的問題,我做了什麼:

    在您的應用程序/配置/ security.yml
  • ,添加:
 
security: 
    ... 
    firewalls: 
     rest_webservice: 
      pattern: /webservice/rest/.* 
      stateless: true 
      http_basic: 
       provider: provider_name 
    ... 
  • 現在,您可以對請求您的web服務:
class AuthTest extends WebTestCase 
{ 
    public function testAuthenticatedWithWebservice() 
    { 
     $client = $this->createClient(); 

     // not authenticated 
     $client->request('GET', '/webservice/rest/url'); 
     $this->assertEquals(401, $client->getResponse()->getStatusCode()); 

     // authenticated 
     $client->request('GET', '/webservice/rest/url', array(), array(), array(
      'PHP_AUTH_USER' => 'username', 
      'PHP_AUTH_PW' => 'password' 
     )); 
     $this->assertEquals(200, $client->getResponse()->getStatusCode()); 
    } 
} 
+0

嗯有趣。我不太確定我是否在這裏遵循一切。你能通過一個完整的例子嗎?即用戶foo將他們的用戶名/密碼提供給移動應用程序。然後,該應用程序隨每個對API的請求都包含該用戶名和密碼?在明文?這是安全的嗎?對不起,如果我在這裏誤解了一些東西! – Marc

+0

由於dondlero說你必須禁用cookies,這就是爲什麼我添加無狀態參數爲true。 Personnaly我不喜歡摘要認證,因爲它很難實現。 Http基本方法很簡單,工作正常。用戶名和密碼在每個請求中都可見。你必須使用SSL證書。 – julesbou

+0

奇怪的是,即使設置了'stateless:true',我仍然收到'Set-Cookie'頭文件。任何想法爲什麼會發生? –

3

是Marc,jules指着一個例子來向你展示如何用http_basic測試認證。

要成爲RESTful,您應該避免使用cookie,否則只需將其稱爲API即可。關於您的身份驗證系統的安全性,您可以通過https使用http_digest,或使用api_key/api_secret方法使用更安全的簽名請求。

看一看這裏http://wiki.zanox.com/en/RESTful_API_authentication

相關問題