Откройте URL авторизации, не открывая браузер Python - PullRequest
0 голосов
/ 17 января 2019

Я использую google_auth_oauthlib.flow в Python для авторизации аккаунта Google Oauth 2. Мой код выглядит так:

from google_auth_oauthlib.flow import InstalledAppFlow

flow = InstalledAppFlow.from_client_secrets_file(
    "client_secret_929791903032.apps.googleusercontent.com.json",
    scopes=['profile', 'email'])

flow.run_local_server(open_browser=False)

session = flow.authorized_session()

profile_info = session.get(
    'https://www.googleapis.com/userinfo/v2/me').json()

print(profile_info)

На основе run_local_server() документа я попытался установить open_browser=False, но затем Google предоставил мне URL для авторизации, похоже, это https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=929739191032-hpdm8djidqd8o5nqg2gk366efau34ea6q.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=profile+email&state=oHJmupijpVH2gJEPqTogVVHIEtbVXcr&access_type=offline

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

Итак, мой вопрос: как открыть URL авторизации, не открывая браузер? Я хочу, чтобы мой код автоматически авторизовался, не делая вручную.

1 Ответ

0 голосов
/ 18 января 2019

Итак, мой вопрос, как открыть URL авторизации, не открывая браузер? Я хочу, чтобы мой код автоматически авторизовался, не делая вручную.

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

Если вы не используете G Suite, вы не сможете обойти экран аутентификации пользователя при первом входе пользователя на ваш сайт. После аутентификации пользователя с доступом offline вы можете сохранить токен обновления для использования в будущем.

Аутентификация и Авторизация между клиентом (пользователем) и Аккаунтами Google. Ваше программное обеспечение не участвует в части учетных данных (имя пользователя, пароль и т. Д.). Пользователь должен предоставить разрешение на использование учетных записей Google, чтобы ваши службы могли получить доступ к идентификационной информации Google.

[ПРАВИТЬ 1/22/2019 - после вопроса о том, как сохранить токен обновления]

Следующий код с авторизацией и сохранением токена обновления:

# pip install google-auth-oauthlib
from google_auth_oauthlib.flow import InstalledAppFlow

# https://google-auth-oauthlib.readthedocs.io/en/latest/reference/google_auth_oauthlib.flow.html

flow = InstalledAppFlow.from_client_secrets_file(
    'client_secrets.json',
    scopes=['https://www.googleapis.com/auth/cloud-platform'])

cred = flow.run_local_server(
    host='localhost',
    port=8088,
    authorization_prompt_message='Please visit this URL: {url}',
    success_message='The auth flow is complete; you may close this window.',
    open_browser=True)

with open('refresh.token', 'w+') as f:
    f.write(cred._refresh_token)

print('Refresh Token:', cred._refresh_token)
print('Saved Refresh Token to file: refresh.token')
...