2013-02-17 3 views
5

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

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

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

ответ

15

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

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

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

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

+0

Thanks breno. Погрузившись в стороннюю библиотеку, было явно добавлено assert_prompt = force. Я не сталкивался с этим в документах, которые я прочитал, но удаление этого действительно устранило проблему. Работая, как шарм, спасибо! – Greg

Смежные вопросы