Ajax 请求云 运行 需要身份验证的服务
Ajax request to cloud run service that requires authentication
我在 google 云 运行 的服务上遇到了与 CORS 相关的问题
需要身份验证。
如果我尝试使用 Bearer 令牌通过 cli 执行 curl 命令,
一切正常。
不幸的是,如果我尝试通过 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 进行呼叫时,在网络
浏览器。 Web 浏览器正在发出飞行前请求(
上的 OPTIONS
url )而不发送授权 header (这是预期的
行为 )
问题似乎是云 运行 试图验证选项
请求但从未进入我的容器,据我所知,
不应该这样做。 (
https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0 )
这是云 运行 的已知问题吗?
如何向经过身份验证的云 运行 服务发出 ajax 请求?
(云 运行 下午)
这是一个已知问题。有几个选项:
- 允许未经身份验证的请求并 CORS/auth 自己做
- 有一个变体,在您的计算前使用 Cloud Endpoints running on Cloud Run。让端点执行您的 end-user 身份验证,然后将请求转发到您的后端。
- 从同一域提供服务(例如使用 Firebase Hosting proxy)
我们已经考虑实施 Istio CORSPolicy
,这将 return CORS headers 在身份验证检查之前,尽管我们目前还没有致力于此。
我在 google 云 运行 的服务上遇到了与 CORS 相关的问题
需要身份验证。
如果我尝试使用 Bearer 令牌通过 cli 执行 curl 命令,
一切正常。
不幸的是,如果我尝试通过 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 进行呼叫时,在网络
浏览器。 Web 浏览器正在发出飞行前请求(
上的 OPTIONS
url )而不发送授权 header (这是预期的
行为 )
问题似乎是云 运行 试图验证选项
请求但从未进入我的容器,据我所知,
不应该这样做。 (
https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0 )
这是云 运行 的已知问题吗?
如何向经过身份验证的云 运行 服务发出 ajax 请求?
(云 运行 下午)
这是一个已知问题。有几个选项:
- 允许未经身份验证的请求并 CORS/auth 自己做
- 有一个变体,在您的计算前使用 Cloud Endpoints running on Cloud Run。让端点执行您的 end-user 身份验证,然后将请求转发到您的后端。
- 从同一域提供服务(例如使用 Firebase Hosting proxy)
我们已经考虑实施 Istio CORSPolicy
,这将 return CORS headers 在身份验证检查之前,尽管我们目前还没有致力于此。