对需要身份验证的云运行服务的 Ajax 请求

2023-04-18前端开发问题
2

本文介绍了对需要身份验证的云运行服务的 Ajax 请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我遇到了与谷歌云有关的 CORS 相关问题,该服务运行在
需要身份验证.

I'm having a CORS related issue with google cloud run on a service that
requires authentication.

如果我尝试通过 cli 使用 Bearer 令牌执行 curl 命令,
一切正常.不幸的是,如果我尝试在 javascript 中通过 ajax 执行相同的调用,
我收到了 403.

If I try to execute a curl command through the cli, with a Bearer token,
everything works fine. Unfortunately if I try to execute the same call through ajax in javascript,
I receive a 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 error in the cloud run logs is this :

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 )而不发送授权标头(这是预期的
行为)

The issue I'm seeing is that, as I'm making the call using ajax, in a web
browser. The web browser is making a pre flight request ( OPTIONS on the
url ) without sending the Authorization header ( which is an expected
behavior )

问题似乎是云运行尝试验证 OPTIONS
请求并且永远不会到达我的容器,据我所知,
不应该这样做.(
https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0 )

The problem seems to be that cloud run tries to authenticate the OPTIONS
request and never makes it to my container, which, as far as I understand,
shouldn't be done. (
https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0 )

这是云运行的已知问题吗?

Is that a known issue with cloud run ?

如何向经过身份验证的云运行服务发出 ajax 请求?

How could I make an ajax request to an authenticated cloud run service ?

推荐答案

(Cloud Run PM)

(Cloud Run PM)

这是一个已知问题.有几个选项:

This is a known issue. There are a few options:

  1. 允许未经身份验证的请求并自行执行 CORS/身份验证
  1. Allow unauthenticated requests and do CORS/auth yourself
  1. 使用 Cloud Endpoints 在Cloud Run 在您的计算机前运行.让 Endpoints 对您的最终用户进行身份验证,然后将请求转发到您的后端.
  1. There is a variation of this that uses Cloud Endpoints running on Cloud Run in front of your compute. Have Endpoints do your end-user auth, then forward the request to your backend.

  • 从同一域提供服务(例如,使用 Firebase 托管代理)
  • 我们已经考虑实施 Istio CORSPolicy,它将在身份验证检查之前返回 CORS 标头,尽管我们目前还没有承诺.

    We've considered implementing Istio CORSPolicy, which would return CORS headers before the auth check, though we're not committed to this as of now.

    这篇关于对需要身份验证的云运行服务的 Ajax 请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

    The End

    相关推荐

    如何使用百度地图API获取地理位置信息
    首先,我们需要在百度地图开放平台上申请一个开发者账号,并创建一个应用。在创建应用的过程中,我们会得到一个密钥(ak),这是调用API的凭证。 接下来,我们需要准备一个PHP文件,以便可以在网页中调用。首先,我们需要引入百度地图API的JS文件,代码如下...
    2024-11-22 前端开发问题
    244

    ajax请求获取json数据并处理的实例代码
    ajax请求获取json数据并处理的实例代码 $.ajax({ type: 'GET', url: 'https://localhost:44369/UserInfo/EditUserJson',//请求数据 data: json,//传递数据 //dataType:'json/text',//预计服务器返回的类型 timeout: 3000,//请求超时的时间 //回调函数传参 suc...
    2024-11-22 前端开发问题
    215

    layui 单选框、复选框、下拉菜单不显示问题如何解决?
    1. 如果是ajax嵌套了 页面, 请确保 只有最外层的页面引入了layui.css 和 layui.js ,内层页面 切记不要再次引入 2. 具体代码如下 layui.use(['form', 'upload'], function(){ var form = layui.form; form.render(); // 加入这一句});...
    2024-11-09 前端开发问题
    313

    JavaScript小数运算出现多位的解决办法
    在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会...
    2024-10-18 前端开发问题
    301

    正则表达式([A-Za-z])为啥可以匹配字母加数字或特殊符号?
    问题描述: 我需要在我的应用程序中验证一个文本字段。它既不能包含数字,也不能包含特殊字符,所以我尝试了这个正则表达式:/[a-zA-Z]/匹配,问题是,当我在字符串的中间或结尾放入一个数字或特殊字符时,这个正则表达式依然可以匹配通过。 解决办法: 你应...
    2024-06-06 前端开发问题
    165

    Rails 3.1 ajax:成功处理
    Rails 3.1 ajax:success handling(Rails 3.1 ajax:成功处理)...
    2024-04-20 前端开发问题
    11