Symfony2 api的身份验证(适用于移动应用)

时间:2011-07-19 18:33:13

标签: api authentication authorization symfony mobile-application

我为Symfony2应用程序开发了一个REST api。此API将由移动应用使用。许多功能是在当前经过身份验证的用户的上下文中完成的,即:

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

我希望移动应用能够像传统的网络表单一样发布到登录操作。如果证书签出,那么Symfony2会做它并设置一个cookie(这是否可以在访问api的移动应用程序的上下文中工作?)。然后,来自该手机的api请求将(希望)与本机symfony2 security.context服务容器一起使用。

这会有用吗?在将API提供给移动开发人员之前,我需要弄清楚这个授权过程。如果可能的话,我显然希望能够使用本机security.context服务,而不是为使用xAuth或类似功能的api构建一个新的auth系统。

由于

3 个答案:

答案 0 :(得分:14)

我认为你应该做无国籍(没有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());
    }
}

答案 1 :(得分:5)

你在这里,How to create a custom Authentication Provider很棒的文章。

要通过api对Symfony2应用程序进行身份验证,您需要使用: WS-Security

答案 2 :(得分:3)

是的Marc,jules指的是一个示例,只是为了向您展示如何使用http_basic测试身份验证。

要成为RESTful,您应该避免使用cookie,否则只需将其称为API即可。关于您的身份验证系统的安全性,您可以通过https使用http_digest或使用api_key / api_secret方法获得更安全的签名请求。

在这里查看http://wiki.zanox.com/en/RESTful_API_authentication