Я разрабатываю REST API для приложения для смартфона. Аутентификация производится с помощью токена, указанного в заголовках. Я создал аутентификатор (который наследует AbstractGuardAuthenticator), добавил его в список охранников в моем security.yml, и все работает нормально.
Теперь я разрабатываю веб-интерфейс, чтобы пользователь мог воспроизводить некоторые действия, которые он / она может выполнять со своего смартфона, прямо в браузере. Я планирую просто делать простые запросы AJAX. Моя проблема связана с аутентификацией.
На веб-сайте пользователь может пройти аутентификацию либо с помощью формы имени пользователя / пароля по умолчанию, предоставленной Symfony, либо с помощью Facebook (благодаря HWIOAuthBundle). В обоих случаях для аутентификации используются файл cookie PHPSESSID и токен, который создается для аутентификации пользователя.
У меня вопрос: как я могу настроить свое приложение так, чтобы доступ к API контролировался либо моим пользовательским токеном, либо стандартным аутентификатором symfony / HWIOauthBundle в зависимости от запроса?
Я знаю, что «путь печенья» не является практикой RESTful, но я не понимаю, почему в этой ситуации это было бы плохо — кажется, что это самый «естественный» и простой способ продолжить.
ОБНОВЛЕНИЕ 2016-12-29 : Я удалил свой раздел брандмауэра API в security.yml, У меня сейчас только один главный раздел. В этом разделе у меня есть 3 «слушателя»: form_login, oauth (для facebook) и моя охрана. Это прекрасно работает таким образом. Единственная проблема, с которой я могу столкнуться, заключается в том, что части сайта, которые раньше были защищены только form_login / oauth, теперь также доступны благодаря моей защите, т.е. добавьте действительный токен в заголовки. Я не вижу, что может пойти не так, но это не кажется действительно строгим. У кого-нибудь есть идеи по этому поводу?
Задача ещё не решена.
Других решений пока нет …