Подтвердить что ты не робот

Аутентификация для Symfony2 api (для использования мобильных приложений)

Я разработал REST api для своего приложения Symfony2. Этот api будет использоваться мобильным приложением. Большая часть функциональности выполняется в контексте пользователя, прошедшего проверку подлинности, то есть:

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

Я надеюсь, что мобильное приложение сможет отправлять сообщения в действие для входа, как в традиционной веб-форме. Если учетные данные проверяются, то Symfony2 делает это и устанавливает cookie (это даже работает в контексте мобильного приложения, получающего api?). Затем более поздние запросы api с этого мобильного телефона (надеюсь) будут работать с собственным контейнером службы symfony2 security.context.

Будет ли это работать? Мне нужно выяснить этот процесс авторизации, прежде чем я возьму API для разработчиков мобильных устройств. Если возможно, я, очевидно, хотел бы использовать родную службу security.context вместо создания новой системы auth для api, которая использует xAuth или что-то подобное.

Спасибо

4b9b3361

Ответ 1

Я думаю, вы должны сделать это без гражданства (без cookie).

У меня была та же проблема, что я и сделал:

  • в вашем приложении /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());
    }
}

Ответ 3

Да, Marc, jules указывает на пример, чтобы показать вам, как тестировать аутентификацию с помощью http_basic.

Чтобы быть RESTful, вам следует избегать использования файлов cookie, иначе просто назовите его API. О том, насколько безопасна ваша система аутентификации, вы можете пойти с http_digest через https или более безопасный подписанный запрос с помощью api_key/api_secret.

Посмотрите здесь http://wiki.zanox.com/en/RESTful_API_authentication