Python 3.x 查询Google Workspace Enterprise License Manager API时出现的问题
我正在开发一个Python3.7应用程序,目标是部署在Google应用程序引擎上。此应用程序的目标是查询Google Workspace Enterprise License Manager API,以便检索每个Google Workspace许可证的用户列表。总之,这个应用程序的主要目标是查询API的方法 我已经开发了一个应用程序,使用服务帐户通过GSuiteAPI管理GDrive文件。因此,对于这个新应用程序,出于测试目的,我一直使用相同的服务帐户。我们的GSuite管理员已授予此服务帐户范围 "https://www.googleapis.com/auth/apps.licensing“ 因此,我在GCP上的项目上启用了Enterprise License Manager API,并在Google Workspace管理控制台上启用了该API(我们的GSuite管理员通过Powershell成功使用Google Workspace Enterprise License Manager API) 这是我的密码:Python 3.x 查询Google Workspace Enterprise License Manager API时出现的问题,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,我正在开发一个Python3.7应用程序,目标是部署在Google应用程序引擎上。此应用程序的目标是查询Google Workspace Enterprise License Manager API,以便检索每个Google Workspace许可证的用户列表。总之,这个应用程序的主要目标是查询API的方法 我已经开发了一个应用程序,使用服务帐户通过GSuiteAPI管理GDrive文件。因此,对于这个新应用程序,出于测试目的,我一直使用相同的服务帐户。我们的GSuite管理员已授予此服务帐户范
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笔记本在我的计算机上运行此代码时,我收到以下错误:
('No access token in response',{'id_token':'JWT_token_HIDDEN_foru SECURITY_PURPOSE'})
Lib版本:
- Python 3.7
- google api python客户端==1.7.11
- 谷歌认证==1.20.1
编辑: 我在GAE上部署了以下代码:
从google.cloud导入bigquery
从google.oauth2导入服务_帐户
从GoogleAppClient.discovery导入生成
导入请求
导入json
作为pd进口熊猫
SERVICE\u ACCOUNT\u FILE=“SERVICE\u ACCOUNT\u FILE.json”
作用域=[”https://www.googleapis.com/auth/apps.licensing"]
app=烧瓶(名称)
def get_cred():
尝试:
creds=service\u account.Credentials.from\u service\u account\u文件(
服务\帐户\文件,范围=范围
)
例外情况除外,如e:
打印(e)
返回e
回信
@附件路线(“/”)
def main():
打印(“开始”)
creds=get_cred()
服务=构建(“授权”、“v1”、凭据=凭据)
尝试:
答复=(
服务许可证转让()
.listForProduct(customerId=“出于安全目的隐藏”,productId=“谷歌应用程序”)
.execute()
)
打印(“##响应={}”。格式(响应))
例外情况除外,如e:
打印(e)
打印(“结束”)
返回“OK”
如果名称=“\uuuuu main\uuuuuuuu”:
#这仅在本地运行时使用。部署到Google应用程序时
#引擎,一个Web服务器进程(如Gunicorn)将为应用程序提供服务。这
#可通过向app.yaml添加“入口点”进行配置。
app.run(host=“127.0.0.1”,端口=8080,调试=True)
#[结束gae_蟒蛇37_应用程序]
我发现错误
您的服务帐户是否使用域范围的委派?如果是这样的话,它是在模仿一个拥有RBAC权限的用户来查看许可证吗
使用API资源管理器
并对您试图模拟的用户进行自动验证,查看是否得到响应
如果您不喜欢,您需要模拟一个超级管理员用户,并且如果您需要先在GCP控制台中启用“不执行模拟”,则需要在域上自动调整作用域,您提到过这一点。您的服务帐户是否使用域范围的委派?如果是这样的话,它是在模仿一个拥有RBAC权限的用户来查看许可证吗 使用API资源管理器 并对您试图模拟的用户进行自动验证,查看是否得到响应
如果您不喜欢,您需要模拟超级管理员用户,并且如果您需要先在GCP控制台中启用“不执行模拟”,则需要在域上自动调整范围,您提到的情况已经发生。据我所知,api不支持服务帐户,您认为它支持什么?据我所知,api不支持服务帐户,您认为它支持什么?