GCP存储静态站点调用GCP函数



我得到了一个"作业,似乎不能让它工作,文档根本没有帮助。

任务:

  1. 创建一个POST函数,接收一个字符串,然后返回相同的字符串
  2. 创建一个静态站点(只是一个html表单),允许用户提交调用上述函数的字符串。

我在GCP中部署了一个Java函数,现在通过Postman工作,但是每当我尝试从本地静态站点调用它时,我都会得到403。

对于邮递员的工作,我使用了云shell命令:gcloud auth print-identity-token

然后我把这个令牌放在授权承载令牌头中。

但是,当我在静态站点上这样做时,我得到403:

fetch("https.myGoogleFunctionEndpoint.a.run.app", {
method: "POST",
mode: "no-cors",
headers: {
"Content-Type": "text/plain",
"Authorization": "Bearer [myToken]
},
body: "Working!!!"
})
.then(response => response.body)
.then(data => {
console.log("Success:", data);
})
.catch((error) => {
console.error("Error:", error);
});

我不能使用——allow-unauthenticated。

如何显示我是一个经过身份验证的用户?

我确实在Identity平台上创建了一个用户,并且可以运行这个命令来获得一个ID令牌…但是找不到任何地方告诉我我该怎么用那个令牌…或者我是否走对了方向!这只是在本地测试,我甚至没有上传我的HTML和JS文件到桶,也没有设置api网关…

任何帮助都将非常感激!

这是Java Fx btw:

package gcfv2;
import com.google.cloud.functions.HttpFunction;
import com.google.cloud.functions.HttpRequest;
import com.google.cloud.functions.HttpResponse;
import java.io.BufferedWriter;
import java.io.IOException;
import java.net.HttpURLConnection;
public class HttpMethod implements HttpFunction {
@Override
public void service(HttpRequest request, HttpResponse response)
throws IOException {
BufferedWriter writer = response.getWriter();
switch (request.getMethod()) {
case "GET":
response.setStatusCode(HttpURLConnection.HTTP_OK);
writer.write("Hello world!");
break;
case "POST":
response.setStatusCode(HttpURLConnection.HTTP_OK);
response.setContentType("text/plain; charset=utf-8");
writer.write(request.getReader().readLine());
break;
default:
response.setStatusCode(HttpURLConnection.HTTP_BAD_METHOD);
writer.write("Something blew up!");
break;
}
}
}

创建OIDC身份令牌时必须指定audience,即云功能URL。

gcloud auth print-identity-token——audience =URL_OF_CLOUD_FUNCTION

一旦完成了这部分开发,就必须在应用程序中实现OAuth。谷歌有JavaScript的例子。永远不要在应用程序中硬编码令牌或凭据,除非是为此目的而设计的。

客户端Web应用的OAuth 2.0

Google Cloud functions只接受Google Account (Gmail, Workspace, Service Account,…)与IAM服务。

因此,如果您的用户是通过第三方系统(使用SSO)进行身份验证的,您就不能将它们直接授予Cloud Functions

一个解决方案是在你的云功能API网关前面部署一个代理,它检查来自第三方的身份验证,然后执行对云功能的安全调用

我用非托管等价物ESPv2写了一篇文章。您可以利用它来设置您的API网关

相关内容

  • 没有找到相关文章

最新更新