Автоматизация 3-х факторной аутентификации через скрипт для Lyft Api
Я пытаюсь использовать Python API Lyft Rides для доступа к данным Lyft. В частности, я пытаюсь получить доступ к конечной точке оценки поездки.
from lyft_rides.auth import ClientCredentialGrant
from lyft_rides.session import Session
from lyft_rides.client import LyftRidesClient
auth_flow = ClientCredentialGrant(client_id=MY_ID, client_secret=MY_SECRET, scopes="public")
session = auth_flow.get_session()
client = LyftRidesClient(session)
response = client.get_cost_estimates(start_latitude=start_lat, start_longitude=start_long, end_latitude=end_lat, end_longitude=end_long)
Тем не менее, частота всплеска в ответных данных всегда равна 0, даже в часы помпажа, и я диагностировал это потому, что я не использую трехстороннюю аутентификацию.
Из документов разработчиков Lyft,
Трехсторонний поток для доступа к конечным точкам пользователя.
Чтобы делать запросы на поездку или иным образом получать доступ к данным пользователя, пользователь должен предоставить вам доступ. Пользователям, у которых нет учетной записи Lyft, будет предложено создать новую учетную запись, если они будут перенаправлены в следующем потоке.
авторизация
Если вам нужен доступ к учетной записи пользователя Lyft, чтобы делать запросы от его имени, вы пройдете через "3-х сторонний" поток. В этом случае вам потребуется, чтобы пользователь предоставил доступ к вашему приложению через поток кода авторизации OAuth 2.0. Смотрите Lyft API документы.
Поток кода авторизации представляет собой двухэтапный процесс авторизации. На первом этапе пользователь авторизует ваше приложение, а на втором этапе запрашивается токен доступа OAuth 2.0 у Lyft. Этот процесс обязателен, если вы хотите предпринять действия от имени пользователя или получить доступ к его информации.
from lyft_rides.auth import AuthorizationCodeGrant
auth_flow = AuthorizationCodeGrant(
YOUR_CLIENT_ID,
YOUR_CLIENT_SECRET,
YOUR_PERMISSION_SCOPES,
)
auth_url = auth_flow.get_authorization_url()
Перейдите к пользователю auth_url, где он может предоставить доступ к вашему приложению. После этого они будут перенаправлены на redirect_url в формате REDIRECT_URL? Code=UNIQUE_AUTH_CODE. Используйте этот redirect_url для создания сеанса и запуска LyftRidesClient.
session = auth_flow.get_session(redirect_url)
client = LyftRidesClient(session)
credentials = session.oauth2credential
Храните учетные данные в безопасном хранилище данных и используйте их повторно для выполнения вызовов API от имени вашего пользователя. SDK будет автоматически обновлять токен, когда он отправляет запросы API с LyftRidesClient.
Вопрос
Я пытаюсь автоматизировать запрос Python в сценарии. Учитывая, что третий этап аутентификации требует ручного посещения URL-адреса и получения кода, возможно ли это сделать с помощью сценария?
1 ответ
[Полное раскрытие: я один из адвокатов разработчиков Lyft]
Единственный способ получить эти данные, запросивrides.request
область действия - через 3-х сторонний поток OAuth (извините за это). Однако вам нужно только один раз запросить это внешнее разрешение, если вы попросите offline
область как часть первоначального разрешения. Если у вас изначально запрошена эта область, вы можете использовать refresh_token
S, как указано здесь, и не запрашивается внешний URL:
https://developer.lyft.com/docs/authentication
Если вы используете этот скрипт только локально, я бы рекомендовал пройти авторизацию один раз, а затем встроить логику обновления токена в ваш скрипт, если срок действия вашего токена истек. Надеюсь, это поможет!