Во-первых, позвольте мне описать приложение: мы работаем над веб-программным обеспечением, которое представляет собой своего рода специализированное приложение службы поддержки. Для этого требуется, чтобы пользователь выполнил вход (мы используем FOSUserBundle). После авторизации пользователь перенаправляется в панель управления. С панели управления больше нет перезагрузки страницы, интерфейс построен на Angularjs, и пользователь может попасть в любое место в приложении без перезагрузки страницы. Можно говорить об одностраничном приложении.
Таким образом, данные, которые предоставляются пользователю, извлекаются из остальных API (мы используем FOSRestBundle). На данный момент это работает достаточно хорошо.
Есть какая-то дилемма. Только наши сотрудники будут иметь доступ к этому приложению (пока). Таким образом, сотруднику необходимо войти в систему, чтобы получить доступ к службе поддержки. Данные, которые передаются во внешний интерфейс через angularjs, вызываются через API, поэтому пользователю, который только что вошел в систему, необходимо снова аутентифицироваться при каждом запросе из-за отдыха.
Проблема: Так как бэкенд работает на symfony2, давайте просто попробуем получить объект пользователя вошедшего в систему пользователя при вызове API:
$this->get('security.context')->getToken()->getUser()
возвращает anon., что означает анонимный, или
$this->getUser();
возвращает просто null.
Таким образом, аутентифицированный контекст, похоже, исчез при использовании остальных API. Однако, когда я вызываю действие напрямую без отдыха, я могу получить информацию о пользователе.
Итак, что нам нужно, так это защитить наш rest API и получать информацию о пользователе при каждом вызове API. Мы не хотим, чтобы третьи лица имели доступ к нашему приложению, только сотрудники. Я не знаком с OAuth, но пользователь будет перенаправлен на стороннюю страницу, чтобы разрешить/запретить доступ к его данным? Для нас это был бы не вариант.
Основываясь на этой информации, есть ли у вас какие-либо предложения или идеи, как защитить API и транспортировать пользовательские данные, чтобы getUser не возвращал null или anon. но фактически зарегистрированный пользователь?