如何使用 Google API 在 App Engine 中添加自定义域映射?

How do I use Google API to add custom domain mapping in App Engine?

我正在尝试使用 Google API(不是通过控制台)将自定义域映射添加到我的 App Engine 应用程序。但是,当使用 Discovery API 客户端发出 http 请求时,我不断收到 403 forbidden 错误。我已经从具有所有者权限的 App Engine 获得了凭据 json 文件,并使用 GOOGLE_APPLICATION_CREDENTIALS env 变量指向该文件。由于我拥有完全权限,我猜问题是我没有正确使用 API 但无法看到缺少的内容。

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = os.path.dirname(__file__) + str('/json_cred_file')

apps_client = googleapiclient.discovery.build('appengine', 'v1beta')

response = apps_client.apps().domainMappings().create(
        appsId='apps/myappname', body=json.loads(
        '{"id": "newsubdomain.mydomain.com","sslSettings": '
        '{"sslManagementType": "AUTOMATIC"  }}')).execute()

这是错误:

WARNING  2018-07-06 23:51:09,331 http.py:119] Encountered 403 Forbidden with reason "forbidden"

他们的文档中有一个特殊页面用于在 App Engine 上使用此库:https://developers.google.com/api-client-library/python/guide/google_app_engine

这就是我使用 googleapiclient 库的方式。我看到的一个区别是这一行:

credentials = GoogleCredentials.get_application_default()

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

class DataFlowJobsListHandler(AdminResourceHandler):

    def get(self, resource_id=None):
        """
        Wrapper to this:
        https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs/list
        """
        if resource_id:
            self.abort(405)
        else:
            credentials = GoogleCredentials.get_application_default()
            service = discovery.build('dataflow', 'v1b3', credentials=credentials)
            project_id = app_identity.get_application_id()
            _filter = self.request.GET.pop('filter', 'UNKNOWN').upper()

            jobs_list_request = service.projects().jobs().list(
                projectId=project_id,
                filter=_filter)  #'ACTIVE'
            jobs_list = jobs_list_request.execute()

            return {
                '$cursor': None,
                'results': jobs_list.get('jobs', []),
            }

我联系了 Google 支持,问题是在使用域映射功能时,需要将服务帐户作为所有者添加到搜索控制台。这是搜索控制台:https://www.google.com/webmasters/tools/home