У меня есть следующие элементы:
- Серверная часть PHP, предоставляющая RESTful API, защищенный с помощью OAuth (FOSOAuthServerBundle с Symfony 2)
- Внешний интерфейс Javascript (AngularJS), то есть клиент OAuth.
Моя цель - предоставить пользователям страницу аутентификации во внешнем интерфейсе, позволяющую им входить в систему и получать доступ к API через Javascript.
Я делаю это следующим образом, согласно этой статье: http://www.bubblecode.net/fr/2013/03/10/comprendre-oauth2/ (к сожалению, на французском, но если вы немного прокрутите, диаграммы, поясняющие стандартные потоки грантов, будут на английском языке):
- Предоставляю форму с запросом учетных данных пользователя (логин и пароль)
- Я использую неявное предоставление OAuth для обмена учетных данных пользователя на токен доступа.
Пока все должно работать (почти) хорошо.
Теперь причина этого вопроса в том, что я хочу добавить вход Facebook в свой интерфейс. Это дает мне токен доступа к Facebook каждый раз, когда пользователь регистрируется с помощью Facebook Login на моем интерфейсе. В идеале мой бэкэнд должен:
- получить этот жетон
- проверьте его на Facebook PHP API, чтобы проверить его
- получить из Facebook PHP API пользовательский UID Facebook
- сравните это с данными моих зарегистрированных пользователей приложения
- вернуть токен доступа (на этот раз для моего собственного приложения, а не для Facebook) тогда и только тогда, когда UID Facebook совпадает с одним из моих зарегистрированных пользователей приложения.
Мой вопрос: какой тип гранта мне следует использовать для совершения транзакции между моим интерфейсом и сервером в таком случае использования (учитывая, что, конечно, неприемлемо предоставлять моему клиенту Секрет от клиента Javascript)?