вход в систему с помощью google всегда запрашивает согласие пользователя

У меня есть внутреннее веб-приложение для моей компании, которое использует логин с системой аутентификации Google. По большей части он работает хорошо, они могут пройти аутентификацию в Google, дать согласие моему приложению на доступ к основным данным пользователя, а затем, когда они будут возвращены в мое приложение, я действительно могу получить их данные пользователя.

Проблема в том, что я думал, что если они дадут согласие, им не придется делать это каждый раз. Это неверное предположение? Как и сейчас, каждый раз, когда они нажимают «Войти через Google», они должны давать согласие, а не перенаправляться обратно в мое приложение.

Я использую PHP (codeigniter) и довольно хорошую библиотеку Oauth, найденную на github (вилка библиотеки phil sturgeon). Есть ли какой-то параметр, который я должен передать, чтобы пользователю не приходилось давать согласие каждый раз после первого раза?


person Greg    schedule 17.02.2013    source источник


Ответы (1)


Для входа в Google не требуется каждый раз согласие пользователя. Если вы используете процедуру входа в систему OAuth2, вы сможете войти в систему второй раз без повторного утверждения: https://developers.google.com/accounts/docs/OAuth2Login

Однако в некоторых случаях автоутверждение может быть отключено с последующим требованием согласия пользователя при каждом входе в систему.

Первый и наиболее распространенный случай - ваше приложение каждый раз явно запрашивает у Google запрос согласия. Убедитесь, что ваш запрос на авторизацию (который вы могли скопировать из примера или образца кода) содержит строку «prompt = соглашение» или старую нестандартную форму «Approval_prompt = force». Удаление этих параметров (если они есть), скорее всего, приведет к тому, что автоутверждение начнет работать.

Другая ситуация - если ваш URL-адрес перенаправления основан на «localhost» или каком-либо другом URL-адресе, который не принадлежит глобальному пространству имен DNS. В этом случае из соображений безопасности Google устанавливает файл cookie на компьютере пользователя в домене account.google.com, чтобы сигнализировать, что пользователь авторизовал _this_device_ для входа в 'foo' на localhost (или локальном домене); Google будет автоматически одобрять без согласия второй запрос только в том случае, если найдет файл cookie. Причина в том, что значение «localhost» (или локального домена, или другого URL-адреса, не основанного на глобальном пространстве имен DNS) зависит от устройства, и разрешение на применение авторизации на разных устройствах может представлять угрозу безопасности. Таким образом, если ваша компания настроила браузеры на очистку всех файлов cookie при выходе, и вы используете неабсолютный URL-адрес, вы можете видеть, что ваши пользователи должны каждый раз давать согласие. Решение состоит в том, чтобы разместить вашу конечную точку на допустимом в Интернете имени хоста (хост не должен быть доступен извне интрасети, просто имя хоста должно быть глобально действительным), или вам необходимо освободить account.google.com от политика очистки файлов cookie.

person breno    schedule 18.02.2013
comment
Спасибо, брено. Погружаясь в стороннюю библиотеку, она явно добавляла Approval_prompt = force. Я не встречал этого в документах, которые я читал, но удаление этого действительно устранило проблему. Работает как шарм, спасибо! - person Greg; 19.02.2013
comment
Привет, брено, в настоящее время у меня очень похожая проблема, которую не решает ваш текущий ответ. Не могли бы вы взглянуть на нее? stackoverflow.com/questions/52083196/ - person Neok; 17.09.2018
comment
Это случилось со мной, когда я использовал access_type=offline, но на самом деле не использовал токен обновления для последующих авторизаций (я просто звонил /o/oauth2/v2/auth, когда токен отсутствует / истек). Похоже, что поведение Google OAuth недавно изменилось, в результате чего полный поток аутентификации повторно запускался, если был передан access_type=offline, тогда как в прошлом он просто возвращал новый токен доступа. Использование потока токенов обновления (/oauth2/v4/token), начиная со второй авторизации, устранило проблему для меня. - person Janaka Bandara; 17.07.2020