簡體   English   中英

Symfony2 api 的身份驗證(用於移動應用程序)

[英]Authentication for a Symfony2 api (for mobile app use)

我為我的 Symfony2 應用程序開發了 REST api。 此 api 將由移動應用程序使用。 大部分功能是在當前經過身份驗證的用戶的上下文中完成的,即:

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

我希望移動應用程序能夠像傳統的 web 表單一樣發布到登錄操作。 如果憑證簽出,那么 Symfony2 會執行此操作並設置一個 cookie(這甚至可以在訪問 api 的移動應用程序的上下文中工作嗎?)。 然后稍后來自該手機的 api 請求將(希望)與本機 symfony2 security.context 服務容器一起使用。

這行得通嗎? 在將 API 帶給移動開發者之前,我需要弄清楚這個授權過程。 如果可能的話,我顯然希望能夠使用本機 security.context 服務,而不是為使用 xAuth 或類似東西的 api 構建新的身份驗證系統。

謝謝

我認為你應該做到無狀態(沒有cookie)。

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

  • 在您的 app/config/security.yml 中,添加:
security:
    ...
    firewalls:
        rest_webservice:
            pattern: /webservice/rest/.*
            stateless: true
            http_basic:
                provider: provider_name
    ...
  • 現在您可以向您的網絡服務發出請求:
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());
    }
}

您在這里, 如何創建自定義身份驗證提供程序很棒的文章。

要通過 api 對 Symfony2 應用程序進行身份驗證,您需要使用: WS-Security

是的,Marc,jules 指的是一個示例,只是為了向您展示如何使用 http_basic 測試身份驗證。

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

看看這里http://wiki.zanox.com/en/RESTful_API_authentication

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM