Аутентификация для 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 или что-то подобное.
Спасибо
Ответы
Ответ 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());
}
}
Ответ 2
Здесь вы находитесь, Как создать собственный поставщик аутентификации.
Для аутентификации в приложении Symfony2 через api вам необходимо использовать:
WS-Security
Ответ 3
Да, Marc, jules указывает на пример, чтобы показать вам, как тестировать аутентификацию с помощью http_basic.
Чтобы быть RESTful, вам следует избегать использования файлов cookie, иначе просто назовите его API. О том, насколько безопасна ваша система аутентификации, вы можете пойти с http_digest через https или более безопасный подписанный запрос с помощью api_key/api_secret.
Посмотрите здесь http://wiki.zanox.com/en/RESTful_API_authentication