Я использую аутентификацию OAuth2, и у меня есть CMS с несколькими пользователями, каждый со своими профилями. Бывает, что у нашей компании есть учетная запись Google с доступом к нескольким учетным записям Google Analytics. Для каждого пользователя, использующего CMS, я подключаюсь к API Google Analytics с использованием другого имени пользователя, и каждый токен пользователя сохраняется в хранилище данных базы данных. Проблема в том, что если один пользователь отключает и отменяет свой токен, ни один из других пользователей, которые используют одну и ту же учетную запись Google, не сможет получить доступ к API Google Analytics, что не имеет смысла.
EDIT: после дальнейшего исследования я обнаружил, что когда первый пользователь аутентифицируется, токен, сохраненный в хранилище данных, содержит "refresh_roken", а также "access_token". Однако, когда другие пользователи аутентифицируются (они используют одну и ту же учетную запись google, но разные учетные записи Google Analytics), их токены будут содержать только "access_token". Если один из них аннулирует свой токен, все потеряют свои связи.
Как я могу остановить это и каждый пользователь получит свой собственный refresh_token?
ИЗМЕНИТЬ 2:
Я храню отдельные строки в хранилище данных, по одному для каждого пользователя. Позвольте мне пояснить, если вы посмотрите на эту диаграмму, представьте себе CMS, где одному пользователю CMS нужно будет видеть статистику из "Лиз Личной учетной записи" и другой пользователь CMS должен видеть статистику из "Liz Team Account".
Оба пользователя CMS принадлежат к одной компании, и оба они используют одну и ту же учетную запись google - "[email protected]" . Пользователь CMS A подключается к API Google Analytics с помощью "[email protected]" , получает refresh_token и хочет просмотреть статистику для "Liz Website". Затем пользователь CMS B подключается к API Google Analytics также с помощью "[email protected]" , но теперь он больше не получает refresh_token, только access_token - это проблема, потому что пользователю будет предложено снова подключиться после доступа_token истекает.
То, что я обычно делал, когда один пользователь отключился, заключался в том, чтобы удалить токен из хранилища данных и отменить токен, но, возможно, я не должен его отзывать, должен ли я? В любом случае, если в моем сценарии пользователь A отключается, это удаляет его токен хранилища данных, а это значит, что мы больше не будем иметь refresh_token, поскольку у пользователя B его не было в первую очередь.
Диаграмма учетных записей пользователей: