Автоматизация 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, будет предложено создать новую учетную запись, если они будут перенаправлены в следующем потоке.

Из документов Python,

авторизация

Если вам нужен доступ к учетной записи пользователя 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_tokenS, как указано здесь, и не запрашивается внешний URL:

https://developer.lyft.com/docs/authentication

Если вы используете этот скрипт только локально, я бы рекомендовал пройти авторизацию один раз, а затем встроить логику обновления токена в ваш скрипт, если срок действия вашего токена истек. Надеюсь, это поможет!

Другие вопросы по тегам