Нужно обновить токен без использования экрана согласия в G Suite - PullRequest
0 голосов
/ 03 января 2019

Мы используем G Suite API с нашим сервисом Micro для редактирования документов, и у нас другой центр обработки данных, а также разные базы данных.Теперь, когда пользователь заходит в мое приложение и пытается открыть документ в первый раз, тогда Google дает экран согласия на основе этого, я могу получить токен обновления и получить токен и сохранить в одном центре обработки данных.

Но проблема в том, что если пользовательприбывает из другого экземпляра, который использует другой центр обработки данных с другой базой данных, и пользователь пытается открыть документ со старыми учетными данными, тогда Google не дает никакого экрана согласия, поэтому я не получаю токен обновления пользователя.

1) Так есть ли способ получить токен обновления без использования экрана согласия?

2) Есть ли способ определить, пришел ли пользователь из другого субдомена, тогда мне нужно предоставить экран согласияза что?

Ответы [ 4 ]

0 голосов
/ 05 января 2019

Любое приложение может иметь только один действительный токен обновления для пользователя. Вы можете запросить новый токен обновления, используя prompt=true&access_type=offline в запросе, как говорит @John. Но каждый раз предыдущий становится недействительным.

Исходя из ваших комментариев к другим ответам, я предполагаю, что создание нового микро-сервиса, который возвращает токен тому, который используется, не представляется возможным (это было бы моей рекомендацией)

Вы попросили "определить, пришел ли пользователь из другого субдомена" ...
Если эти приложения предназначены для конечных пользователей учетных записей gmail.com, вы можете рассматривать их как разные приложения и настраивать различные проекты на консоли разработчика.
При включении новых API будет немного больно, я бы порекомендовал сделать это из скрипта, который реплицируется на все необходимые приложения.

Если ваши конечные пользователи принадлежат компаниям, использующим GSuite, ваше приложение может быть установлено как общедоменное приложение (вручную или из GSuite Marketplace). В этом случае вы можете использовать только аутентификацию на стороне клиента, чтобы получить id_token, отправить токен на сервер и использовать учетную запись службы, чтобы выдать себя за пользователя в любой данной службе, не беспокоясь о каком-либо из них.

0 голосов
/ 03 января 2019

Вы можете идентифицировать домен пользователя, используя параметр hd [1], и вы можете запросить токен обновления без экрана согласия после того, как администратор домена настроил делегирование домена в целом, установив ваше приложение из GSuite Marketplace [2].

[1] https://developers.google.com/identity/protocols/OpenIDConnect#hd-param

[2] https://support.google.com/a/answer/172482?hl=en

0 голосов
/ 04 января 2019

Когда вы запрашиваете поток OAuth (access_type = offline`), в ваше приложение возвращается токен обновления.Это происходит только один раз (получение токена обновления).Ожидается, что ваше приложение сохранит маркер обновления для будущих нужд.

В вашем случае одна из ваших систем завершила аутентификацию, и пользователь перешел на другую систему.Вам нужно будет повторно подтвердить подлинность с помощью prompt=consent, access_type=offline.Вы не получите другой токен обновления без повторной аутентификации.

Я потратил много времени на эту проблему в ноябре прошлого года.Вот ссылка , в которой много деталей по этой проблеме.

0 голосов
/ 03 января 2019

Возможно, можно использовать опцию prompt=consent для принудительного повторного запроса на аутентификацию, даже если пользователь уже авторизовал ваше приложение.

См. https://developers.google.com/identity/protocols/OAuth2WebServer#creatingclient

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...