云端点是否可以仅使用基础 URL 来保护所有 API 访问?

Cloud endpoints is it possible to protect all API accesses using only a base URL?

假设我的 api 位于 domain/_ah/api。我们有 domain/_ah/api/getUser、domain/_ah/api/stuff/getStuff、domain/_ah/api/stuff/moreStuff/postMoreStuff。

是否可以只定义这样的东西来做到这一点?´

  swagger: '2.0'
  info:
    title: "Cloud Endpoints + Cloud Run"
    description: "Sample API on Cloud Endpoints with a Cloud Run backend"
    version: "1.0.0"
  host: "domain"
  schemes:
    - "https"
  produces:
    - "application/json"
  x-google-backend:
    jwt_audience: "audience"
    address: "domain_backend"
    protocol: "h2"
  paths:
    /_ah/api/*:
      get, post, put, etc:
        description: "Protects Base URL"
        operationId: "authInfoFirebase"
        security: 
          - firebase: []

  securityDefinitions:
    firebase:
      authorizationUrl: ""
      flow: "implicit"
      type: "oauth2"
      x-google-issuer: "https://securetoken.google.com/<project_id>"
      x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com"
      x-google-audiences: "<project_id>"

恐怕 Cloud Endpoints 无法识别您指定的通配符。

引用文档:

“Endpoints 仅支持 URL 对应于整个路径段的路径模板参数(由斜杠 / 分隔)。 URL 不支持对应于部分路径段的路径模板参数。”[1]

通配符的解决方法是使用路径模板。 您可以使用花括号 {} 将 URL 的部分标记为路径参数,使用您的示例:

domain/_ah/api/{value1}

domain/_ah/api/{value1}/{value2}

domain/_ah/api/{value1}/{value2}/{value3}

注意路径模板不要重叠,如本例所示:

/items/{itemid} ---> 这是有效的

/items/{itemId}/subitem ----> 这是有效的

/items/cat ----> 这是无效的

[1] https://cloud.google.com/endpoints/docs/openapi/openapi-limitations#url_path_templating