У нас запущена стандартная настройка MEAN - угловая для рендеринга интерфейса, node.js (express) в качестве сервера. Статические ресурсы HTML/Javascript передаются с узла без проверки подлинности. Все данные, отображаемые в интерфейсе, запрашиваются Угловым из узла. Угловое разрешение пользователя на конечные точки узла путем подачи токена-носителя JWT в заголовке «Авторизация» запросов ajax.Обратный вызов API Google на сервере REST без состояния
Это работает отлично, но я в тупике, когда речь идет об интеграции API Google OAuth2 в этой настройке. Цель состоит в том, чтобы отобразить данные календаря пользователя в веб-приложение:
- Угловые запросы /API/календари от узла подачи носителя маркера в заголовке запроса.
- Если у сервера нет токена доступа Google для этого пользователя, он создает URL-адрес маркера Google (включая callbackUrl/api/calendars/googleCallback) и отправляет его обратно в Angular.
- Когда «Угловой» получает в качестве ответа вместо данных календаря значение tokenRequest-Url, он перенаправляет пользователя на этот URL-адрес, где он вручную предоставляет разрешение webapp.
- Google перенаправляет адрес обратного вызова, предоставляя код доступа.
Проблема шаг 4 - как сервер узла является лицом без гражданства и перенаправлять от Google для /API/календари/googleCallback код = XYZ не содержит авторизации заголовка сервер не может определить, не говоря уже о аутентифицировать к которому принадлежит предоставленный код доступа.
Динамическое добавление какого-либо хэша, идентифицирующего пользователя для URL-адреса обратного вызова, не работает (и, похоже, небезопасно), поскольку Google принимает только предварительно заданные фиксированные URL обратного вызова. Я мог хранить идентификацию пользователя в cookie, но это похоже на нарушение общего подхода JWT.
Вопрос будет, если описанный выше поток в общем случае является плохой идеей или если есть лучшие практики для решения этой ситуации, чтобы позволить серверу определять, к какому пользователю относится запрос на обратный вызов.
Спасибо!