Как подключить интерфейс Javascript с помощью входа в Facebook и серверную часть PHP через OAuth 2.0?

У меня есть следующие элементы:

  • Серверная часть PHP, предоставляющая RESTful API, защищенный с помощью OAuth (FOSOAuthServerBundle с Symfony 2)
  • Внешний интерфейс Javascript (AngularJS), то есть клиент OAuth.

Моя цель - предоставить пользователям страницу аутентификации во внешнем интерфейсе, позволяющую им входить в систему и получать доступ к API через Javascript.

Я делаю это следующим образом, согласно этой статье: http://www.bubblecode.net/fr/2013/03/10/comprendre-oauth2/ (к сожалению, на французском, но если вы немного прокрутите, диаграммы, поясняющие стандартные потоки грантов, будут на английском языке):

  1. Предоставляю форму с запросом учетных данных пользователя (логин и пароль)
  2. Я использую неявное предоставление OAuth для обмена учетных данных пользователя на токен доступа.

Пока все должно работать (почти) хорошо.


Теперь причина этого вопроса в том, что я хочу добавить вход Facebook в свой интерфейс. Это дает мне токен доступа к Facebook каждый раз, когда пользователь регистрируется с помощью Facebook Login на моем интерфейсе. В идеале мой бэкэнд должен:

  • получить этот жетон
  • проверьте его на Facebook PHP API, чтобы проверить его
  • получить из Facebook PHP API пользовательский UID Facebook
  • сравните это с данными моих зарегистрированных пользователей приложения
  • вернуть токен доступа (на этот раз для моего собственного приложения, а не для Facebook) тогда и только тогда, когда UID Facebook совпадает с одним из моих зарегистрированных пользователей приложения.

Мой вопрос: какой тип гранта мне следует использовать для совершения транзакции между моим интерфейсом и сервером в таком случае использования (учитывая, что, конечно, неприемлемо предоставлять моему клиенту Секрет от клиента Javascript)?


person Silverspur    schedule 10.12.2014    source источник


Ответы (1)


Собственно, решение мне удалось найти. Для решения этой проблемы должно быть разработано специальное разрешение на основе неявного предоставления (в котором секрет клиента не запрашивается).

Однако FOSOauthServerBundle еще не реализует гранты на основе общедоступных клиентов (см. https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/issues/266).

person Silverspur    schedule 11.12.2014