9


認証が必要なサービスで Google クラウドを実行すると、CORS 関連の問題が発生します。

CLI を介してベアラー トークンを使用して curl コマンドを実行しようとすると、
すべて正常に動作します。残念ながら、JavaScript で ajax を介して同じ呼び出しを実行しようとすると
、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

コンテナがヒットすることはありません。

私が見ている問題は、Web
ブラウザーで ajax を使用して呼び出しを行っていることです。Web ブラウザーは
、Authorization ヘッダーを送信せずにプリフライト要求 (URL の OPTIONS) を行っています (これは予期される
動作です) 。

問題は、クラウドの実行が OPTIONS リクエストを認証しようと
し、コンテナーに到達しないことです。これは、私が理解している限り、
行うべきではありません。(
https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0 )

これは cloud run の既知の問題ですか?

認証済みのクラウド実行サービスに ajax リクエストを送信するにはどうすればよいですか?

4

1 に答える 1