当前位置: 首页 > 知识库问答 >
问题:

Google应用程序默认凭据-开发中权限不足&生产中请求错误

姬俊能
2023-03-14

我正在使用谷歌应用程序默认凭据来获取使用Gmail API的标签列表。

当使用 命令在本地运行应用程序时,我在请求https://www.googleapis.com/gmail/v1/users/user40domain.com/labels?alt=json时获得

然后我部署了应用程序并尝试访问。但是当我请求https://www.googleapis.com/gmail/v1/users/user40domain.com/labels?alt=json返回“Bad Request&>”时,我得到了 httperr:<httperror 400;<="" ode="">

我在 中有正确的配置:

account = my_email@domain.com (Appengine Application Owener & Domain Admin)
disable_usage_reporting = False
project = <appengine_project_id>

gcloud版本详细信息:

Google Cloud SDK 0.9.76
app 2015.08.27
app-engine-python 1.9.25
bq 2.0.18
bq-nix 2.0.18
core 2015.08.27
core-nix 2015.06.02
gcloud 2015.08.27
gsutil 4.14
gsutil-nix 4.12
preview 2015.08.27

此外,我还添加了服务帐户的客户端ID&Gmail作用域:https://www.googleapis.com/auth/Gmail.readonly(在Google Apps admin CPanel中)和Appengine控制台中启用的Gmail API。

null

from googleapiclient.discovery import build
from oauth2client.client import GoogleCredentials

class Connection:
    def __init__(cls):
        cls.credentials = GoogleCredentials.get_application_default()

    def fetch_labels(cls):
        service = build('gmail', 'v1', credentials=cls.credentials)

        logging.info(service)

        results = service.users().labels().list(userId='user@domain.com').execute()
        labels = results.get('labels', [])

        if not labels:
            logging.info('No labels found.')
        else:
            logging.info('Labels:')
            for label in labels:
                logging.info(label['name'])
        pass


class Handler(webapp2.RequestHandler):
    def get(self):
        con = Connection()
        con.fetch_labels()

共有1个答案

危文乐
2023-03-14

我对此不能百分百肯定,但我不认为应用程序默认凭据支持域范围内的授权委托。您仍然需要使用带有 参数的服务帐户凭据:

credentials = SignedJwtAssertionCredentials(
    service_account_email, service_account_key,
    scope='...', sub=user_email)
 类似资料: