OAuth 2 — это протокол, который позволяет пользователям безопасно передавать доступ к своим данным между сервисами без передачи паролей.
Основные понятия OAuth 2:
Клиент (Client) — приложение или сервис, который хочет получить доступ к вашим данным.
Пример: Вы используете Telegram и хотите подключить его к Google Drive, чтобы сохранять файлы. Telegram — клиент.
Ресурсный сервер (Resource Server) — сервер, где хранятся ваши данные.
Пример: Google Drive, где хранятся ваши файлы.
Авторизационный сервер (Authorization Server) — сервер, который проверяет пользователя и выдает разрешение на доступ.
Пример: Google проверяет ваш аккаунт и спрашивает: «Разрешить Telegram доступ к Google Drive?»
Токен доступа (Access Token) — специальный ключ, который клиент получает после авторизации и использует для доступа к данным.
Пример: После вашего разрешения Telegram получает токен и использует его, чтобы загружать файлы в Google Drive от вашего имени.
Обновляющий токен (Refresh Token) — ключ, который позволяет получать новый токен доступа без повторного входа.
Пример: Если токен доступа истек через час, Telegram использует обновляющий токен, чтобы запросить новый.
Как это работает?
Допустим, вы хотите дать сайту доступ к вашим фотографиям на Google Photos:
Сайт перенаправляет вас на страницу Google, где вы входите в аккаунт.
Google спрашивает, разрешаете ли вы доступ.
Если вы согласны, Google отправляет сайту токен доступа.
Сайт использует этот токен, чтобы загружать или просматривать ваши фото, но не знает ваш пароль.
Это безопасно, потому что вы в любой момент можете отменить доступ через настройки Google.
OAuth 2 можно использовать для авторизации на сайте!
Как это работает для входа на сайт?
Допустим, вы хотите войти на сайт с помощью своей учетной записи Google (или другой соцсети):
Кнопка входа: На сайте есть кнопка «Войти через Google».
Перенаправление на Google: Сайт отправляет вас на страницу Google, где вам предлагают войти в свой аккаунт.
Разрешение: После входа Google спрашивает: «Разрешить этому сайту использовать ваш аккаунт?»
Токен: Если вы согласны, Google отправляет сайту специальный токен.
Авторизация: Сайт получает информацию о вашем аккаунте (например, ваш email) и использует её, чтобы вас зарегистрировать или войти.
Пример в реальной жизни
Вы заходите на сайт, который позволяет «Войти через Facebook». Вместо того, чтобы придумывать новый логин и пароль, вы просто подтверждаете вход через Facebook, и сайт использует ваш Facebook-профиль для входа.
В чем польза?
Безопасно — сайт не узнает ваш пароль.
Удобно — не нужно запоминать новые пароли.
Быстро — вход в один клик.
пошаговое руководство по добавлению авторизации через OAuth 2 на сайт.
1. Регистрация приложения
Сначала нужно зарегистрировать ваш сайт в провайдере OAuth (например, Google, Facebook, GitHub).
Для Google:
Перейдите в Google Cloud Console.
Создайте новый проект.
В разделе «OAuth 2.0 Credentials» создайте «OAuth Client ID».
Укажите Redirect URI (например, https://yoursite.com/callback).
Получите Client ID и Client Secret.
2. Редирект пользователя для авторизации
На вашем сайте создайте ссылку, которая отправляет пользователя на авторизационный сервер. Например, для Google:
<a href="https://accounts.google.com/o/oauth2/auth?
client_id=ВАШ_CLIENT_ID&
redirect_uri=ВАШ_REDIRECT_URI&
response_type=code&
scope=email profile">Войти через Google</a>
Пользователь перейдет на страницу Google, войдет в аккаунт и разрешит доступ.
3. Обмен кода на токен
После успешной авторизации Google отправит пользователя обратно на ваш redirect_uri с параметром code.
На сервере этот code меняем на токен:
$code = $_GET['code'];
$url = 'https://oauth2.googleapis.com/token';
$data = [
'code' => $code,
'client_id' => 'ВАШ_CLIENT_ID',
'client_secret' => 'ВАШ_CLIENT_SECRET',
'redirect_uri' => 'ВАШ_REDIRECT_URI',
'grant_type' => 'authorization_code'
];
$options = [
'http' => [
'header' => "Content-Type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
],
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$response = json_decode($result, true);
$access_token = $response['access_token'];
Этот токен нужен, чтобы получить данные о пользователе.
4. Получение данных пользователя
Теперь, используя access_token, можно запросить информацию о пользователе:
$url = 'https://www.googleapis.com/oauth2/v2/userinfo?access_token=' . $access_token;
$user_info = json_decode(file_get_contents($url), true);
echo 'Вы вошли как: ' . $user_info['email'];
На этом этапе можно создать сессию и авторизовать пользователя.