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

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

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

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

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

спасибо

3 ответов


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

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

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

вот вы, Как создать пользовательский поставщик проверки подлинности потрясающая статья.

для аутентификации в приложении Symfony2 через api вам нужно использовать: WS-Security


да Марк, Жюль указывает на пример, чтобы показать вам, как тестировать аутентификацию с помощью http_basic.

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

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