我在 需要身份验证的服务上运行Google Cloud的CORS相关问题。
如果我尝试通过带有Bearer令牌的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浏览器正在发出飞行前请求( 网址上的OPTIONS ),而没有发送Authorization标头(这是预期的 行为)
问题似乎是,云运行尝试对OPTIONS 请求进行身份验证,并且从未将其发送到我的容器中,据我所知,这 不应完成。( https://www.w3.org/TR/cors/#cross-origin-request-with- preflight-0)
那是云运行的已知问题吗?
我如何向经过身份验证的云运行服务发出ajax请求?
(云运行PM)
这是一个已知的问题。有几种选择:
我们已经考虑过实现IstioCORSPolicy,该方法将在auth检查之前返回CORS标头,尽管到目前为止我们尚未承诺这样做。
CORSPolicy