Допустим есть фронтенд(SPA) на JavaScript (clientapp.com) и backend rest api на PHP (mybackend.com). Только бэкенд знает client_secret из приложения в Facebook.
Допустим пользователь нажимает на кнопку "Войти через Facebook" после чего происходит запрос:
https://www.facebook.com/v6.0/dialog/oauth?
client_id=123456&
redirect_uri=http://mybackend/fblogin&
display=page&
scope=public_profile,email&
response_type=code
Если пользователь не вошел в Facebook, то выводится страница входа в Facebook. Также, если пользователь уже залогинился в фейсбуке, но еще не давал разрешения приложению, то ему будет предложено сделать это или отказаться.
Если пользователь и вошёл и всё разрешил, то далее facebook делает перенаправление на redirect_uri с authorization code, то есть на бэкенд(далее всё происходит на бэкенде):
http://mybackend/fblogin?code=2612648688
Этот код будет использоваться на бэкенде вместе с client_secret, чтобы получить access_token(происходит обмен code на access_token). Вот на такой адрес будет отправлен запрос(через curl), чтобы был возвращён access_token:
https://graph.facebook.com/oauth/access_token?
client_id=123456&
redirect_uri=http://mybackend/fblogin&
client_secret=347563478563478&
code=2612648688
access_token позволит получить доступ к данным пользователя с помощью которых можно будет зарегестрировать или аутентифицировать пользователя. Вот так получаем данные пользователя(тоже через curl):
https://graph.facebook.com/v6.0/me?
access_token=2384H2G384GK743423&
fields=public_profile,email,location,...
После того как было выполнено всё это, нужно отправить jwt токен клиенту и сохранить его в локальном хранилище.
Так вот, как отправить jwt токен? Как сделать так, чтобы после этого всего пользователь оказался на своей странице, например, clientapp.com/id_765? И чтобы при этом фронтенд получил jwt токен(из заголовка Authorization). Я даже не представляю как на frontend получить ответ с заголовками из backend без прямого запроса(ajax) из фронтенда на бэкенд. А здесь такого запроса нет, frontend делает запрос на Facebook, а не на backend.
Во всех руководствах умалчивается это, либо я туплю, что более вероятно.