Поскольку вы используете несколько поставщиков авторизации, я полагаю, что вы не используете другие области, кроме profile
(для получения идентификатора пользователя).Поэтому я думаю, что вы могли бы использовать свой собственный сервер OAuth2, который поддерживает аутентификацию с использованием внешних провайдеров (Google, Facebook).Тогда ваше приложение будет иметь дело только с токенами доступа, выпущенными вашим сервером OAuth2, которые также будут хранить информацию о личности пользователя.Это решение имеет дополнительное преимущество, заключающееся в том, что вы можете поддерживать пользователей без учетной записи социальной сети - они создадут новую учетную запись на вашем сервере OAuth2.
Другое решение, вероятно, менее изящно, но проще в реализации.Создайте правило, что перед использованием токена доступа клиенты должны зарегистрировать токен на какой-либо новой конечной точке с информацией об эмитенте токена (Google, Facebook ...).Затем вы можете сохранить информацию о том, кто выдал какой токен.На этом этапе, после проверки токена доступа, вы также можете рассмотреть вопрос о замене токена для файла cookie сеанса, который позже будет использоваться для доступа к вашему API вместо токена доступа.Это решение с отслеживанием состояния, что затрудняет его масштабирование, но использование файлов cookie, вероятно, облегчит реализацию клиентов (не нужно обновлять токены).
Как вы уже писали, вам также может потребоваться дополнительная информация о том, кто выдалмаркер.Вы можете использовать собственный заголовок HTTP или префикс токена для него.Его легко реализовать, и он не привнесет состояние в ваш бэкэнд.
Возможно, есть еще несколько решений.Вам решать, какой из них будет соответствовать вашим потребностям.