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

Mar*_*arc 21 authentication api authorization mobile-application symfony

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

$this->container->get('security.context')->getToken()->getUser()
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

jul*_*bou 14

我认为你应该做无国籍(没有cookie).

我有同样的问题,我做了什么:

  • 在你的app/config/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());
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

在这里,您是如何创建自定义身份验证提供程序的精彩文章.

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