Python: как использовать библиотеку запросов для доступа к Flask RestPlus API, размещенному на Google App Engine?

Я создал API для отдыха, используя flask restplus, и протестировал его, используя документацию swagger, и, похоже, он полностью функционален и работает нормально. Теперь я хочу протестировать API с помощью библиотеки запросов python, но получаю следующую ошибку:

Invalid IAP credentials: empty token

Я предполагаю, что это потому, что я не разрешал использовать учетные данные. У меня есть доступ к json-файлу учетных данных служебной учетной записи, но мне просто интересно, как передать это в запросы?

Пример кода:

url = 'https://crosssellapi-project-id.appspot.com/auth/login'

r = requests.get(url, headers={'accept': 'application/json'})

Заранее спасибо.


person Riley Hun    schedule 04.12.2019    source источник


Ответы (1)


Я думаю, что лучший способ добиться этого — использовать библиотеку google-auth для python.

$ pip install google-auth

Я предлагаю создать сервисный аккаунт, дать ему роль Пользователь веб-приложения с защитой IAP, а затем загрузите ключ JSON для этого сервисного аккаунта.

Перейдите в раздел API и службы > Учетные данные и скопируйте Client ID клиента OAuth 2.0, который вы хотите использовать для своего API.

Наконец, используйте этот фрагмент кода, чтобы сделать запрос:

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession

SERVICE_FILENAME = '/path/to/your/service_account_key.json'
API_URL = 'https://YOUR_API_URL'
AUDIENCE = 'YOUR_OAUTH_CLIENT_ID'

credentials = service_account.IDTokenCredentials.from_service_account_file(SERVICE_FILENAME, target_audience=AUDIENCE)

session = AuthorizedSession(credentials)

r = session.get(API_URL, headers={'accept': 'application/json'})

print(r.text)

Если вы хотите узнать больше о google-auth, проверьте это.

person Ferregina Masalo    schedule 05.12.2019
comment
Спасибо большое! Я еще не пробовал это, но где взять идентификатор клиента OAUTH. Я никогда не видел этого раньше - person Riley Hun; 06.12.2019
comment
Перейдите в раздел Безопасность › Прокси-сервер с идентификацией и выберите ресурс, на котором вы хотите предоставить доступ к своему приложению GAE. Затем на появившейся правой панели нажмите Add Member. В поле Новые участники вставьте свой сервисный аккаунт ([email protected]). Наконец, выберите роль IAP-secured Web App User и нажмите Сохранить. Подождите несколько минут и повторите попытку. - person Ferregina Masalo; 06.12.2019
comment
Кроме того, если вы перейдете в раздел Безопасность › Прокси-сервер с идентификацией и появится следующее сообщение: Прежде чем вы сможете использовать IAP, вам необходимо настроить экран согласия OAuth. настроить экран согласия который предоставит идентификатор клиента OAUTH. - person Ferregina Masalo; 06.12.2019
comment
Спасибо, похоже, это решило проблему, но теперь возникли проблемы с использованием одной из конечных точек. Пример вызова: r = session.request('POST', api_url, headers={'accept': 'application/json'}, data={'email': ‹email›, 'password': ‹password›}) Теперь Я получаю сообщение об ошибке: {ошибки: {: None не имеет типа "объект"}, сообщение: Ошибка проверки входных данных} - person Riley Hun; 06.12.2019
comment
Я думаю, что это проблема с кодом на вашем сервере, а не с тем, как создать запрос. Попробуйте создать для него новый вопрос. - person Ferregina Masalo; 06.12.2019
comment
У меня сейчас другая проблема, когда API работает через пользовательский интерфейс swagger, но у API возникают проблемы с некоторыми запросами на получение, которые выполняются через скрипт Python. Хотя вход в систему и выход из нее, похоже, работают. Но API по какой-то причине не может прочитать заголовок авторизации. Как я уже сказал, пользовательский интерфейс swagger работает безупречно. stackoverflow.com/questions/59219036/flask-api-token -отсутствует - person Riley Hun; 07.12.2019