Автоматизация трехфакторной аутентификации с помощью скрипта для Lyft Api

Я пытаюсь использовать API Python 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, чтобы делать запросы от его имени, вы пройдете через «трехсторонний» поток. В этом случае вам потребуется, чтобы пользователь предоставил доступ к вашему приложению через поток кода авторизации 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 в скрипте. Учитывая, что 3-й этап аутентификации требует ручного посещения URL-адреса и получения кода, возможно ли сделать это с помощью скрипта?


person Mahir    schedule 26.04.2017    source источник


Ответы (1)


[Полное раскрытие информации: я являюсь одним из защитников разработчиков Lyft]

Единственный способ получить эти данные — запросить областьrides.request через трехсторонний поток OAuth (извините за это). Однако вам нужно запросить эту внешнюю авторизацию только один раз, если вы запрашиваете область offline как часть первоначальной авторизации. Если у вас изначально запрошена эта область, вы можете использовать refresh_tokens, как описано здесь, и не получать запрос на внешний URL-адрес:

https://developer.lyft.com/docs/authentication#section-step-5-refreshing-the-access-token

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

person Josh Cincinnati    schedule 27.04.2017