Нужно обновить токен без использования экрана согласия в G Suite
Мы используем G Suite API с нашим сервисом Micro для редактирования документов, и у нас другой центр обработки данных, а также другая база данных. Теперь, когда пользователь заходит в мое приложение и пытается открыть документ в первый раз, тогда Google дает экран согласия, основываясь на том, что я могу получить токен обновления и получить токен и сохранить в одном центре обработки данных.
Но проблема в том, что если пользователь пришел из другого экземпляра, который использует другой центр обработки данных с другой базой данных, и пользователь пытается открыть документ со старыми учетными данными, то Google не дает никакого экрана согласия, поэтому я не получаю маркер обновления пользователя.
1) Так есть ли способ получить токен обновления без использования экрана согласия?
2) Есть ли способ определить, если пользователь пришел из другого субдомена, тогда мне нужно предоставить экран согласия на это?
4 ответа
Любое приложение может иметь только один действительный токен обновления для пользователя. Вы можете запросить новый токен обновления, используя prompt=true&access_type=offline
по просьбе @John. Но каждый раз предыдущий становится недействительным.
Основываясь на ваших комментариях к другим ответам, я предполагаю, что создание нового микро-сервиса, который возвращает токен к используемому, не представляется возможным (это было бы моей рекомендацией)
Вы попросили "определить, пришел ли пользователь из другого субдомена"...
Если эти приложения предназначены для конечных пользователей учетных записей gmail.com, вы можете рассматривать их как разные приложения и настраивать различные проекты на консоли разработчика.
При включении новых API будет немного больно, я бы порекомендовал сделать это из сценария, который реплицируется на все необходимые приложения.
Если ваши конечные пользователи принадлежат компаниям, использующим GSuite, вы можете установить ваше приложение как приложение для всего домена (вручную или из GSuite Marketplace). В этом случае вы можете использовать только аутентификацию на стороне клиента, чтобы получить id_token, отправить токен на сервер и использовать учетную запись службы для олицетворения пользователя в любой данной службе, не беспокоясь о каких-либо токенах от них.
Когда вы запрашиваете поток OAuth (access_type=offline`), в ваше приложение возвращается токен обновления. Это происходит только один раз (получение токена обновления). Ожидается, что ваше приложение сохранит маркер обновления для будущих нужд.
В вашем случае одна из ваших систем завершила аутентификацию, и пользователь перешел на другую систему. Вам нужно будет повторно подтвердить подлинность с prompt=consent, access_type=offline
, Вы не получите другой токен обновления без повторной аутентификации.
Я провел много времени по этому вопросу в ноябре прошлого года. Вот ссылка, которая содержит много деталей по этой проблеме.
Возможно, будет возможно использовать prompt=consent
возможность принудительно повторить запрос на авторизацию, даже если пользователь уже авторизовал ваше приложение.
См. https://developers.google.com/identity/protocols/OAuth2WebServer.
Вы можете идентифицировать домен пользователя, используя параметр hd [1], и вы можете запросить токен обновления без экрана согласия после того, как администратор домена настроил делегирование домена в целом, установив ваше приложение из GSuite Marketplace [2].
[1] https://developers.google.com/identity/protocols/OpenIDConnect