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

Symfony2 api的身份验证(用于移动应用程序),api,authentication,authorization,symfony,mobile-application,Api,Authentication,Authorization,Symfony,Mobile Application,我已经为我的Symfony2应用程序开发了一个restapi。此api将由移动应用程序使用。大部分功能都是在当前经过身份验证的用户的上下文中完成的,即: $this->container->get('security.context')->getToken()->getUser() 我希望移动应用程序能够像传统的web表单一样发布到登录操作。如果凭证已签出,则Symfony2将执行此操作并设置cookie(这是否在访问api的移动应用程序的上下文中起作用?)。随后,来自

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

$this->container->get('security.context')->getToken()->getUser()
我希望移动应用程序能够像传统的web表单一样发布到登录操作。如果凭证已签出,则Symfony2将执行此操作并设置cookie(这是否在访问api的移动应用程序的上下文中起作用?)。随后,来自该手机的api请求(希望)将与本机symfony2 security.context服务容器一起工作

这样行吗?我需要先弄清楚这个授权过程,然后才能将API带给移动开发人员。如果可能的话,我显然希望能够使用native security.context服务,而不是为使用xAuth或类似东西的api构建一个新的身份验证系统


谢谢

我认为你应该无状态(没有cookie)来做这件事

我也有同样的问题,我所做的:

  • 在你的app/config/security.yml中,添加:

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

为了实现RESTful,您应该避免使用cookie,否则只需将其称为API即可。关于您的身份验证系统的安全性,您可以使用https上的http\U摘要,或者使用api\U密钥/api\U秘密方法执行更安全的签名请求

看看这里

给你,很棒的文章

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

嗯,很有趣。我不太确定我是否了解这里的一切。你能举一个完整的例子吗?ie用户foo向移动应用程序提供其用户名/密码。然后,应用程序会在每个API请求中包含该用户名和密码?用明文?安全吗?对不起,如果我在这里误解了什么!正如dondlero所说,您必须禁用Cookie,这就是我将无状态参数添加到true的原因。我不喜欢摘要认证,因为它很难实现。Http基本方法简单且工作良好。用户名和密码在每个请求中都可见。您必须使用SSL证书。奇怪的是,即使在设置了
stateless:true
之后,我仍然收到
Set Cookie
标题。知道为什么会这样吗?@AdamMonsen,迟来的回应,你重建了你的缓存吗?@OwenBeresford迟来总比不来好!我不记得了,但我可能记得。我想我以前做Symfony2 dev的时候经常试着这么做。 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());
    }
}