#python-3.x #google-api #google-admin-sdk #google-workspace #google-app-engine-python
# #python-3.x #google-api #google-admin-sdk #google-workspace #google-app-engine-python
Вопрос:
Я разрабатываю приложение на Python 3.7, которое предназначено для развертывания в Google App Engine. Цель этого приложения — запросить API-интерфейс Google Workspace Enterprise License Manager, чтобы получить список пользователей по лицензии Google Workspace. Итак, подводя итог, основная цель этого приложения — запросить метод licenseAssignments.listForProduct API.
Я уже разработал приложение, которое управляет файлом GDrive через GSuite API, используя учетную запись службы. Поэтому для этого нового приложения и для целей тестирования я продолжаю использовать ту же учетную запись службы. Наш администратор GSuite предоставил этой учетной записи Службы область действия
«https://www.googleapis.com/auth/apps.licensing «.
Я следую справочному руководству, поэтому API Enterprise License Manager включен в моем проекте на GCP, а API включен в консоли администратора Google Workspace (наш администратор GSuite успешно использует API Google Workspace Enterprise License Manager через Powershell).
Вот мой код:
from google.oauth2 import service_account
from googleapiclient.discovery import build
CUSTOMER_ID = 'HIDDEN_FOR_SECURITY_PURPOSE'
SERVICE_ACCOUNT_FILE = "service_account_file.json"
SCOPES = "https://www.googleapis.com/auth/apps.licensing"
def get_cred():
try:
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
except Exception as e:
print(e)
return creds
if __name__ == "__main__":
creds = get_cred()
service = build('licensing', 'v1', credentials=creds)
try:
response = service.licenseAssignments().listForProduct(customerId='HIDDEN_FOR_SECURITY_PURPOSE', productId='Google-Apps' ).execute()
except Exception as e:
print(e)
При запуске этого кода через App Engine или на моем компьютере через Jupyter Notebook я получаю эту ошибку:
('No access token in response.', {'id_token': 'JWT_TOKEN_HIDDEN_FOR_SECURITY_PURPOSE'})
Версии Lib:
- Python 3.7
- google-api-python-client == 1.7.11
- google-auth == 1.20.1
Спасибо за вашу помощь!
Редактировать:
Я развернул следующий код на GAE:
from google.cloud import bigquery
from google.oauth2 import service_account
from googleapiclient.discovery import build
import requests
import json
import pandas as pd
SERVICE_ACCOUNT_FILE = "service_account_file.json"
SCOPES = ["https://www.googleapis.com/auth/apps.licensing"]
app = Flask(__name__)
def get_cred():
try:
creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
except Exception as e:
print(e)
return e
return creds
@app.route("/")
def main():
print("## Start")
creds = get_cred()
service = build("licensing", "v1", credentials=creds)
try:
response = (
service.licenseAssignments()
.listForProduct(customerId="HIDDEN_FOR_SECURITY_PURPOSE", productId="Google-Apps")
.execute()
)
print("## Response={}".format(response))
except Exception as e:
print(e)
print("## End")
return "OK"
if __name__ == "__main__":
# This is used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="127.0.0.1", port=8080, debug=True)
# [END gae_python37_app]
Я получаю сообщение об ошибке <HttpError 503 when requesting https://licensing.googleapis.com/apps/licensing/v1/product/Google-Apps/users?customerId=[HIDDEN_FOR_SECURITY_PURPOSE]amp;alt=json returned "Backend Error". Details: "Backend Error">
.
Комментарии:
1. Насколько я вижу, этот api не поддерживает учетные записи служб, авторизующие , что заставляет вас думать, что это так?
Ответ №1:
использует ли ваша учетная запись службы делегирование в масштабах всего домена? и если да, то выдает ли он себя за пользователя, у которого есть разрешения RBAC для просмотра лицензий?
Используйте API explorer https://developers.google.com/admin-sdk/licensing/reference/rest/v1/licenseAssignments/listForProduct?apix_params={«productId»:»Google-Apps»,»customerId»:»XXXXXX PUT YOUR CUST ID HERE»}amp;apix=true
И выполните аутентификацию пользователя, за которого вы пытаетесь выдать себя, и посмотрите, получите ли вы ответ.
Если вам, по-видимому, не нужно выдавать себя за суперадминистратора, и если вы не выполняете олицетворение, которое сначала должно быть включено в консоли GCP, тогда область действия должна быть авторизована в домене, что, как вы упомянули, произошло.