Аутентификация для API Symfony2 (для использования в мобильных приложениях) - PullRequest
21 голосов
/ 19 июля 2011

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

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

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

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

Спасибо

Ответы [ 3 ]

14 голосов
/ 21 июля 2011

Я думаю, вы должны сделать это без сохранения состояния (без 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());
    }
}
5 голосов
/ 12 августа 2011

Вот, пожалуйста, Как создать собственный поставщик аутентификации потрясающая статья.

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

3 голосов
/ 24 июля 2011

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

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

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

...