認証が必要なサービスで 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 リクエストを送信するにはどうすればよいですか?