Ajax-запрос к облачному сервису, требующему аутентификации - PullRequest
4 голосов
/ 26 апреля 2019

У меня возникла проблема, связанная с CORS, при запуске облака Google в службе, для которой
требуется проверка подлинности.

Если я пытаюсь выполнить команду curl через cli с токеном Bearer,
все отлично работает.К сожалению, если я попытаюсь выполнить тот же вызов через ajax в javascript,
я получу 403.

  const http = new XMLHttpRequest();
  const url = 'https://my-app.run.app';

  http.open("GET", url);
  http.withCredentials = true;
  http.setRequestHeader("authorization", 'Bearer ' + id_token);
  http.send();
  http.onreadystatechange = (e) => {
    console.log(http.responseText)
  }

Ошибка в журналах запуска облака:

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header. Read more at https://cloud.google.com/run/docs/securing/authenticating

Контейнер никогда не удаляется.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я звоню с помощью ajax, в веб-браузере
.Веб-браузер выполняет предварительный запрос (ОПЦИИ на
url) без отправки заголовка авторизации (что является ожидаемым поведением
)

Кажется, проблема в том, что облачный прогон пытается аутентифицироватьОПЦИИ
запрашивают и никогда не попадают в мой контейнер, что, насколько я понимаю,
не должно быть сделано.(
https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0)

Это известная проблема с запуском в облаке?

Как я могу сделать ajax-запрос к аутентифицированной службе запуска в облаке?

1 Ответ

4 голосов
/ 26 апреля 2019

(Облачный прогон PM)

Это известная проблема. Есть несколько вариантов:

  1. Разрешить неаутентифицированные запросы и выполнить CORS / авторизацию самостоятельно
    1. Существует вариант, в котором используются конечные точки облака, работающие в облачной среде перед вашими вычислениями. Пусть конечные точки выполнят аутентификацию вашего конечного пользователя, а затем отправят запрос в ваш бэкэнд.
  2. Служить из того же домена (например, использовать прокси-сервер Firebase )

Мы рассмотрели возможность реализации Istio CORSPolicy, которая бы возвращала заголовки CORS перед проверкой аутентификации, хотя на данный момент мы не привержены этому.

...