Что такое OAuth?
OAuth (открытый протокол авторизации) - это протокол, который позволяет пользователям авторизовывать и авторизовывать третьи стороны на доступ к защищенным ресурсам без должных учетных данных. Он использует токены доступа вместо обмена учетными данными, чтобы обеспечить как безопасность, так и комфортность.
Пример использования OAuth:
Предположим, что у нас есть приложение, которое хочет получить доступ к контактам пользователя в Google, чтобы синхронизировать их в приложении. Мы будем использовать OAuth для авторизации приложения на доступ к Google контактам.
Процесс авторизации согласно протоколу OAuth :
1. Пользователь запрашивает доступ к контактам нашего приложения.
2. Наше приложение перенаправляет пользователя на страницу авторизации Google.
3. Пользователь входит в свой аккаунт Google и подтверждает, что он хочет разрешить доступ нашему приложению.
4. Google отправляет пользователю обратно наше приложение с токеном авторизации.
5. Наше приложение использует этот токен для запроса доступа к контактам пользователя Google.
6. Google ответит на запрос с токеном доступа для приложения.
7. Наше приложение использует токен доступа, чтобы получить контакты пользователя Google.
Пример кода:
Создание запроса на авторизацию (Step 1 выше)
python
import requests
import urllib.parse
CLIENT_ID = 'YOUR_CLIENT_ID'
REDIRECT_URI = 'YOUR_REDIRECT_URI'
AUTHORIZATION_ENDPOINT = 'https://accounts.google.com/o/oauth2/auth'
# Формируем URL авторизации
params = {
'response_type': 'code',
'client_id': CLIENT_ID,
'redirect_uri': REDIRECT_URI,
'scope': 'https://www.google.com/m8/feeds',
'state': '123'
}
url = AUTHORIZATION_ENDPOINT + '?' + urllib.parse.urlencode(params)
# Перенаправление пользователя на страницу авторизации Google
print(f'Перенаправление пользователя на страницу авторизации Google: {url}')
Обмен кодом авторизации на токен авторизации (Step 5 & 6 above)
python
TOKEN_ENDPOINT = 'https://accounts.google.com/o/oauth2/token'
CLIENT_SECRET = 'YOUR_CLIENT_SECRET'
# Прием кода авторизации
authorization_code = input('Введите код авторизации: ')
# Формируем тело запроса на обмен кода авторизации на токен
body = {
'code': authorization_code,
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
'redirect_uri': REDIRECT_URI,
'grant_type': 'authorization_code'
}
# Отправка POST запроса на обмен кода на токен
response = requests.post(TOKEN_ENDPOINT, data=body)
# Печать токена авторизации
print(f'Токен авторизации: {response.json()["access_token"]}')
Запрос на доступ к контактам пользователя Google (Step 7 above)
python
import google.auth
from google.oauth2.credentials import Credentials
from google.auth.transport.requests import AuthorizedSession
# Восстановление сесси google.auth
creds = Credentials.from_authorized_user_info(info)
authed_session = AuthorizedSession(creds)
# Формируем запрос для получения контактов
url = 'https://www.google.com/m8/feeds/contacts/default/full'
response = authed_session.get(url)
# Печать контактов
print(response.text)
Это был только один пример использования OAuth. Его можно применять в различных ситуациях, когда требуется безопасный доступ к защищенным ресурсам пользователя без необходимости обмена реальными учетными данными.