我为Symfony2应用程序开发了一个REST api。此API将由移动应用使用。许多功能是在当前经过身份验证的用户的上下文中完成的,即:
$this->container->get('security.context')->getToken()->getUser()
我希望移动应用能够像传统的网络表单一样发布到登录操作。如果证书签出,那么Symfony2会做它并设置一个cookie(这是否可以在访问api的移动应用程序的上下文中工作?)。然后,来自该手机的api请求将(希望)与本机symfony2 security.context服务容器一起使用。
这会有用吗?在将API提供给移动开发人员之前,我需要弄清楚这个授权过程。如果可能的话,我显然希望能够使用本机security.context服务,而不是为使用xAuth或类似功能的api构建一个新的auth系统。
由于
答案 0 :(得分:14)
我认为你应该做无国籍(没有cookie)。
我有同样的问题,我做了什么:
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方法获得更安全的签名请求。