"Это приложение захочет: иметь автономный доступ", когда 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.