Ответ
Аутентификация через Google реализуется с помощью протокола OAuth 2.0. Он позволяет приложению получать доступ к данным пользователя на сервисах Google с его разрешения, не запрашивая логин и пароль напрямую.
Основной флоу для серверного приложения:
- Пользователь инициирует вход через Google.
- Приложение перенаправляет пользователя на страницу согласия Google с указанием запрашиваемых прав (
scopes). - После согласия Google перенаправляет пользователя обратно в приложение с временным кодом авторизации.
- Приложение обменивает этот код на
access tokenиrefresh token. access tokenиспользуется для запросов к Google API от имени пользователя.
Для упрощения этого процесса в Python используется библиотека google-auth-oauthlib.
Пример для локального скрипта:
from google_auth_oauthlib.flow import InstalledAppFlow
# Укажите права доступа, которые нужны вашему приложению
SCOPES = ['https://www.googleapis.com/auth/userinfo.profile']
# Загрузка учетных данных из файла, полученного в Google Cloud Console
flow = InstalledAppFlow.from_client_secrets_file(
'client_secret.json',
SCOPES
)
# Запуск локального сервера для прохождения аутентификации в браузере
credentials = flow.run_local_server(port=0)
# credentials теперь можно использовать для авторизованных запросов
# Например, сохранить их для будущего использования
with open('token.json', 'w') as token_file:
token_file.write(credentials.to_json())
print("Аутентификация прошла успешно!")
Ключевые моменты:
- Необходимо создать проект в Google Cloud Console и получить
client_secret.json. - Важно правильно настроить Redirect URIs для вашего приложения.
access tokenимеет короткий срок жизни, для долгосрочного доступа используетсяrefresh token.
Ответ 18+ 🔞
Смотри, вот тебе вся эта кухня с гугловым входом, разжёвано как для младенца, но с матом для взрослых.
Короче, есть такая штука — OAuth 2.0. Это типа протокол, который позволяет твоей проге лезть в данные пользователя в Гугле, но без этого дикого говна, когда ты у него напрямую логин-пароль спрашиваешь. Пользователь сам говорит Гуглу: «Да, пусть эта мартышлюшка (твоё приложение) посмотрит мою почту/фотки/что ты там хочешь». Умно, да? Безопасно. Ну, как безопасно... Относительно.
Как это работает на сервере, если не вдаваться в дебри:
- Юзер тыкает кнопку «Войти через Гугл».
- Твоя прога вышвыривает его на страницу Гугла, где написано: «Этому приложению-пидорасу нужен доступ к вашему аккаунту. Разрешаете?».
- Если юзер не идиот и разрешает — Гугл пинком под жопу отправляет его обратно к тебе, но прикрепляет к этому пинку специальный одноразовый код. Типа «предъявитель сего имеет право на доступ».
- Твоё приложение, получив этот код, бежит с ним обратно к Гуглу и говорит: «На, обменяй мне эту бумажку на настоящие ключи».
- Гугл выдаёт тебе
access token(временный пропуск) и, если очень повезёт,refresh token(волшебную флешку, чтобы пропуск обновлять, когда срок действия кончится). - С этим
access tokenты уже можешь дёргать Гугл АПИ и спрашивать: «Эй, а как этого юзера зовут?».
Чтобы не ебаться с этим вручную, есть библиотека google-auth-oauthlib. Для локального скрипта, который ты на своей машине гоняешь, делается как-то так:
from google_auth_oauthlib.flow import InstalledAppFlow
# Тут ты объявляешь, на что именно ты такой жадина.
# Хочешь профиль? Вот тебе scope на профиль.
SCOPES = ['https://www.googleapis.com/auth/userinfo.profile']
# Грузишь конфиг из файла, который ты должен был выклянчить у Гугла в их Cloud Console.
# Без этого файла — нихуя не выйдет, это как паспорт для твоего приложения.
flow = InstalledAppFlow.from_client_secrets_file(
'client_secret.json',
SCOPES
)
# Эта штука запустит локальный сервер, откроет браузер и поведёт юзера за ручку по всем шагам.
credentials = flow.run_local_server(port=0)
# Всё, credentials у тебя в кармане. Можно, например, сохранить их в файл, чтобы потом не проходить этот цирк заново.
with open('token.json', 'w') as token_file:
token_file.write(credentials.to_json())
print("Ну всё, юзер обдолблен, доступ получен!")
На что смотреть, чтобы не обосраться:
- Файл
client_secret.json— это святое. Его получаешь в Google Cloud Console, создав проект и настроив OAuth. Без него ты просто хуй с горы. - Redirect URIs — адреса, куда Гугл может слать ответ. Их надо тупо и правильно прописать в консоли Гугла, иначе будет тихий пиздец и ошибка «redirect_uri mismatch».
access tokenживёт недолго, час или два. Аrefresh token— это твоя палочка-выручалочка на долгую перспективу. Но его могут и не дать, если неправильно настройки скопаешь. Вот такая, блядь, магия.