Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 查询Google Workspace Enterprise License Manager API时出现的问题_Python 3.x_Google Api_Google Admin Sdk_Google Workspace_Google App Engine Python - Fatal编程技术网

Python 3.x 查询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管理员已授予此服务帐户范

我正在开发一个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)

这是我的密码:

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不支持服务帐户,您认为它支持什么?