Принудительный выбор учетной записи google

Есть ли способ заставить появиться средство выбора учетной записи Google, даже если пользователь вошел в систему только с одной учетной записью.

Я попытался перенаправить на этот URL:

https://accounts.google.com/AccountChooser?service=lso&continue=[authorizeurl]

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

введите описание изображения здесь


person José F. Romaniello    schedule 17.01.2013    source источник


Ответы (5)


В URL-адресах авторизации OAuth2 поддерживается следующий параметр:

prompt

В настоящее время он может принимать значения none, select_account и consent.

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

  • согласие: заставит отображать страницу утверждения, даже если пользователь ранее авторизовал ваше приложение. Может быть полезно в некоторых случаях, например, если вы потеряли refresh_token для пользователя, поскольку Google выдает refresh_tokens только при явном согласии.

  • select_account: вызовет отображение селектора учетной записи, даже если есть один вошедший в систему пользователь, как вы и просили.

select_account можно комбинировать с consent, например:

prompt=select_account consent

person breno    schedule 18.01.2013
comment
«Подтверждение_промпт = принудительное» то же самое, что «приглашение = согласие»? Спасибо - person José F. Romaniello; 18.01.2013
comment
Да, но в отличие от prompt = accept его нельзя комбинировать с опцией select_account. Вместо этого используйте «подсказку», если пишете новый код сейчас. - person breno; 23.01.2013
comment
Есть ли способ принудительно войти в систему с учетными записями Gmail (например, hd = gmail.com)? - person woloski; 25.01.2013
comment
@woloski, да, hd = default должен ограничиваться учетными записями Gmail - person Ari Porad; 29.08.2013
comment
Я получаю экран select_account, но на нем нет кнопки удаления. Как мне удалить учетную запись, если мне нужно? - person vashishatashu; 16.10.2014
comment
Документация Google и параметры / параметры developers.google.com/accounts/docs/ - person CTS_AE; 16.11.2014
comment
prompt = select_account + согласие не работает, вы захотите использовать приглашение prompt = select_account ------ docs: developers.google.com/accounts/docs/OpenIDConnect - person Brett C; 14.02.2015
comment
select_account+consent - это, вероятно, значение в кодировке URL. Я думаю, что в ответе должна отображаться строка, разделенная пробелами, как указано в документации. - person Rafa; 15.03.2016
comment
Если вы следуете последнему руководству по адресу developers.google.com/ identity / sign-in / web /, вы также можете добавить его в свой div для создания кнопок. ‹Div class = g-signin2 data-width = 300 data-height = 50 data-longtitle = true data-onsuccess = onSignIn data-theme = dark data-prompt = select_account› ‹/div› - person AdamG; 27.03.2016
comment
Это НЕ требует от пользователя повторной аутентификации. Нет запроса на ввод пароля, и любой человек может щелкнуть учетную запись пользователя и авторизоваться. Как, черт возьми, это безопасно на общедоступном компьютере? Может ли кто-нибудь сказать мне, как я заставляю пользователя снова вводить свой пароль при входе в систему после того, как он вышел? - person Hugo Cox; 09.06.2018
comment
@HugoCox Ну, oauth2 - это не аутентификация, а авторизация. У вас нет возможности заставить Google требовать от пользователей повторного входа в систему. Вы можете только потребовать от пользователей согласия или выбрать учетную запись. Google требует аутентификации, если пользователь не аутентифицирован, вы можете контролировать только авторизацию, поскольку ваш клиент является проверяющей стороной, а не эмитентом токена. Надеюсь, это немного проясняет ситуацию. - person bigkahunaburger; 29.06.2019
comment
вот ссылка для просмотра полного API для javascript: developers.google. com / identity / protocol / oauth2 / - person Snedden27; 21.03.2020

Также вы можете добавить параметр "prompt" в теги HTML как data-prompt = "select_account":

<div class="g-signin2" data-onsuccess="onSignIn" data-prompt="select_account"> 

и он будет заставлять выбор учетной записи каждый раз, даже если вы вошли в систему только с одной учетной записью

person Josip Lukacevic    schedule 22.08.2016
comment
У меня не работает <div class="g-signin2" data-scope="profile email" data-width="298" data-onsuccess="onSignIn" data-prompt="select_account" ></div>, но onSignIn все равно вызывается каждый раз - person Benjamin Poignant; 06.03.2018
comment
@BenjaminPoignant Ваша проблема (успешный обработчик мгновенно вызывается при загрузке страницы) немного отличается от той, о которой идет речь (хотя ваше замешательство понятно). Как указано в stackoverflow.com/a/15503280/1709587, вам нужно использовать gapi.auth2.getAuthInstance().signOut(); для выхода пользователя из вашего приложения. Этот вопрос касается того, как после этого гарантировать, что когда пользователь снова нажимает кнопку входа в систему, он получает возможность выбрать, с какой учетной записью Google войти, вместо того, чтобы мгновенно использовать свою текущую учетную запись Google. как только будет нажата кнопка входа. - person Mark Amery; 30.11.2018

Некоторые люди могут оказаться здесь в поисках ответа о том, как это сделать в Microsoft.AspNetCore.Authentication.

Мы смогли сделать это с помощью следующего кода в методе Startup.ConfigureServices:

services.AddAuthentication()
  .AddGoogle(options =>
  {
      options.ClientId = configHelper.GoogleOAuthClientID;
      options.ClientSecret = configHelper.GoogleOAuthSecret;
      options.CallbackPath = "/signin-google";
      options.AuthorizationEndpoint = string.Concat(options.AuthorizationEndpoint, "?prompt=select_account");
  });
person jaybro    schedule 29.03.2018

Если вы используете gapi, просто добавьте prompt: 'select_account'
Пример:

gapi.load('auth2', function () {
            gapi.auth2.init({
                client_id: "client_id.apps.googleusercontent.com",
                scope: "profile email", // this isn't required
                ux_mode: 'redirect',
                redirect_uri: 'https://www.example.com',
                prompt: 'select_account'
            }).then(function (auth2) {
                console.log("signed in: " + auth2.isSignedIn.get());
                x = auth2.isSignedIn.get();
                auth2.isSignedIn.listen(onSignIn);
                var button = document.querySelector('#signInButton');
                button.addEventListener('click', function () {
                    auth2.signIn();
                });
            });
        });
person Yash    schedule 29.03.2019

Для клиента google api php (https://github.com/google/google-api-php-client) вам удастся сделать это следующим образом:

$client = new Google_Client();
$client->setApprovalPrompt("force");
$client->createAuthUrl();
person saimcan    schedule 18.06.2019