Включение CORS для Cloud Run с Cloud Endpoints v1 - PullRequest
0 голосов
/ 06 августа 2020

Я читал статью о Medium для развертывания Cloud Endpoints v1 перед сервисом Cloud Run, в котором размещен REST API, и все работает хорошо.

Теперь у меня есть требование включить поддержку CORS, и я добавил приведенную ниже конфигурацию в YAML-файл моих конечных точек, но получаю сообщение об ошибке «Эта служба не разрешает трафик CORS c», когда мой браузер пытается сделать предполетный запрос (я тестировал это с Почтальоном тоже с такой же ошибкой). Я знаю, что есть флаг для включения CORS --cors_preset=basic с использованием переменных среды, но я не уверен, какой ключ установить. Любые идеи или помощь приветствуются.

Конечные точки YAML snipper:

swagger: '2.0'
info:
  title: Cloud Endpoints with Cloud Run
  description: Testing Cloud Endpoints with Cloud Run
  version: 1.0.0
host: endpoint-<hash>-uc.a.run.app
x-google-endpoints:
- name: endpoint-<hash>-uc.a.run.app
  allowCors: true
schemes:
  - https
produces:
  - application/json

Ошибка:

{
    "code": 7,
    "message": "The service does not allow CORS traffic.",
    "details": [
        {
            "@type": "type.googleapis.com/google.rpc.DebugInfo",
            "stackEntries": [],
            "detail": "service_control"
        }
    ]
}

PS: Спасибо Guillaum Blaquiere за потрясающую статью.

ОБНОВЛЕНИЕ: Я закончил тестирование с неполным URL-адресом и, следовательно, получил указанную выше ошибку как моя внутренняя служба не была настроена для ответа на все URL-адреса предполетных запросов. Исправив это, я теперь получаю указанную ниже ошибку только для URL-адреса, настроенного перед запуском CORS.

{
  "code": 13,
  "message": "INTERNAL_SERVER_ERROR",
  "details": [
    {
      "@type": "type.googleapis.com/google.rpc.DebugInfo",
      "stackEntries": [
        
      ],
      "detail": "application"
    }
  ]
}

и журналов:

invalid URL prefix in "", client: <CLIENT_IP>, server: , request: "OPTIONS /api/v1/<REMAINING_URL> HTTP/1.1", host: "endpoint-<HASH>-uc.a.run.app"

Ответы [ 2 ]

0 голосов
/ 18 августа 2020

Мне удалось решить проблему, определив операции OPTIONS в моем YAML-файле без защиты для каждого пути, который я уже определил. См. Ниже пример файла YAML для пути к конечной точке '/ api / v1 / hello' с определенными операциями GET и OPTIONS.

swagger: '2.0'
info:
  title: Cloud Endpoints with Cloud Run
  description: Testing Cloud Endpoints with Cloud Run
  version: 1.0.0
host: endpoint-randomhash-uc.a.run.app
x-google-endpoints:
  - name: endpoint-randomhash-uc.a.run.app
    allowCors: true
schemes:
  - https
produces:
  - application/json
x-google-backend:
  address: https://backend-randomhash-uc.a.run.app
  path_translation: APPEND_PATH_TO_ADDRESS
security:
  - auth0_jwk: []
paths:
  /api/v1/hello:
    get:
      summary: Say hello
      operationId: helloName
      parameters:
        - name: "name"
          in: "query"
          description: "Your name"
          type: "string"
      responses:
        '200':
          description: Successful operation
          schema:
            type: string
    options:
      summary: CORS pre-flight for say hello
      operationId: helloNameOptions
      parameters:
        - name: "name"
          in: "query"
          description: "Your name"
          type: "string"
      responses:
        '200':
          description: Successful operation
          schema:
            type: string
      security: []
securityDefinitions:
  auth0_jwk:
    authorizationUrl: ""
    flow: "implicit"
    type: "oauth2"
    x-google-issuer: "https://project.auth0.com/"
    x-google-jwks_uri: "https://project.auth0.com/.well-known/jwks.json"
    x-google-audiences: "firebase-application-host"

Как указал Серджио в своем комментарии к вопросу SO, другой вариант в моем случае - использовать прокси-сервер Firebase Hosting , чтобы использовать тот же домен и избегать CORS.

0 голосов
/ 07 августа 2020

Я бы сказал, что необходимо добавить ESPv2 Config , я заметил, что примечание относительно конфигурации ESPv2 было добавлено с прошлого апреля, а документ Medium был опубликован в 2019 году, поэтому я считаю, что это необходимо шаг не упоминался ранее.

Позже в том же разделе упоминается, что флаги для cors передаются с помощью флага «--set-env-vars» команды развертывания.

Вы подробнее о параметрах запуска ESPv2 Beta можно узнать здесь.

...