"Это приложение захочет: иметь автономный доступ", когда access_type = онлайн

У меня есть приложение Google с аутентификацией OAuth 2.0. Все работает нормально, но в последнее время я начал получать следующий экран "Запрос на разрешение":

enter image description here

Странная часть заключается в том, что я получаю этот экран при передаче access_type=online. Опять же, это работало до недавнего времени.

Что может быть причиной этого? ТИА

Edit:

Запрашиваемые области:

https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile

Я уже пробовал:

  • с и без access_type=online
  • с и без approval_prompt=auto

Изменить # 2:

Это код python, который я использую для создания URL-адреса аутентификации:

encoded_params = urllib.urlencode({
    "response_type" : "code",
    "client_id" : MY_CLIENT_ID,
    "scope" : " ".join(MY_SCOPES),
    "redirect_uri" : MY_REDIRECT_URI,
    "state" : random_security_token,
    "access_type" : "online",
    "approval_prompt" : "auto",
    })

auth_url = "https://accounts.google.com/o/oauth2/auth?" + encoded_params

Обновление (14 октября):

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

Ответ 1

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

Решение состоит в том, чтобы отозвать маркеры, когда вы закончите с ними (либо при выходе пользователя из системы, либо сразу после аутентификации пользователя), отправив этот запрос:

https://accounts.google.com/o/oauth2/revoke?token={token}

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

(здесь https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke)

У меня была такая же проблема, и никакая комбинация значений access_type или approval_prompt, казалось, не решила ее. Отмена маркера сделала трюк.

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

https://security.google.com/settings/security/permissions

Ответ 2

Недавно Google изменила область действия для электронной почты. Вы должны заменить

https://www.googleapis.com/auth/userinfo.email

с:

https://www.googleapis.com/auth/plus.profile.emails.read 

и

https://www.googleapis.com/auth/plus.login

Тогда автономный доступ должен исчезнуть.

См. также:

https://developers.google.com/+/api/oauth#email

Предупреждение: эта область устарела. Google больше не будет поддерживать эту область после 1 сентября 2014 года. Подробнее см. В разделе "Переход на Google+".

Это также изменяет способ получения адреса электронной почты:

https://developers.google.com/+/api/auth-migration#email

Также имейте в виду, что вам нужно активировать Google+ API в консоли управления, чтобы это работало.

Ответ 3

Использование http://localhost в параметре redirect_url запроса OAuth приведет к тому, что пользователю будет предложено предоставить автономный доступ при первом их аутентификации после каждого входа.

Ответ 4

Tzach. Чтобы не запрашивать экран согласия после первого входа в систему. Это может потребоваться для передачи значения функции:

$client- > setApprovalPrompt ( "авто" );

Ответ 5

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

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

approval_prompt=auto

чтобы избежать приглашения

Ответ 6

У меня была такая же проблема. Хотя я не устанавливал

access_type=online

Однако, согласно моему пониманию, значение по умолчанию

access_type 

есть

online 

От: https://developers.google.com/identity/protocols/OAuth2WebServer: "Стиль доступа по умолчанию называется онлайн".

Для меня это решило удалить:

prompt=consent

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

Я считаю, что параметр prompt предназначен для замены параметра authorized_prompt. Но кажется, что если я настрою его на "согласие", это должно означать, что я хочу, чтобы экран обычного согласия показывался каждый раз, а не экран согласия "автономный доступ". Документы здесь: https://developers.google.com/identity/protocols/OpenIDConnect#prompt, похоже, не опровергают это понятие, поэтому я не уверен, почему он ведет себя таким образом. Но, по крайней мере, мне удалось заставить его работать так, как я хочу, пока.

Ответ 7

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

'Доступ в автономном режиме'

по сравнению с другими (кто получает то, что я думаю, что вы хотите увидеть):

'Просмотр базовой информации о вашей учетной записи'

Ответ 8

Используете ли вы клиентскую библиотеку API Google API?

https://developers.google.com/api-client-library/

Он устанавливает access_type в 'offline', когда обновляет токены самостоятельно

В версии Python я изменил строку 1204 файла oauth2client/client.py

от

    'access_type': 'offline',

к

    'access_type': 'online',

и теперь он работает корректно.

Ответ 9

Я применил все в этом вопросе. В моем случае обрабатывались только очищающие файлы cookie.