首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GCP: API-网关Cors发布和添加自定义身份验证

GCP: API-网关Cors发布和添加自定义身份验证
EN

Stack Overflow用户
提问于 2021-04-08 07:30:28
回答 1查看 1.1K关注 0票数 0

我已经配置了API来调用云功能,我们也为这个API主机配置了负载均衡器。但是,当我们从web应用程序调用这个负载均衡器终结点时,我们将面临CORS问题。

问题1:请指导我如何在API文件中添加CORS支持。问题2:如何向这个开放的api配置YAML文件中添加自定义身份验证端点?

高级流: webapp ->负载均衡器url ->API-网关-> CloudFunction

我按照GCP链接:cors添加了云功能上的CORS后端支持。

云函数代码如下:

代码语言:javascript
运行
复制
public class Demand implements HttpFunction {
private static final Logger logger = Logger.getLogger(Demand.class.getName());
// Use GSON (https://github.com/google/gson) to parse JSON content.
private static final Gson gson = new Gson();
@Override
public void service(HttpRequest request, HttpResponse response) throws Exception {
String contentType = request.getContentType().orElse("");
logger.info(() -> "contentType: " + contentType);
// Set CORS headers
// Allows GETs from any origin with the Content-Type
// header and caches preflight response for 3600s
response.appendHeader("Access-Control-Allow-Origin", "*");
System.out.println("Added preflight options request support::::::::::");
if ("OPTIONS".equals(request.getMethod())) {
System.out.println("OPTIONS::::::::::::::::");
response.appendHeader("Access-Control-Allow-Methods", "*");
response.appendHeader("Access-Control-Allow-Headers", "Content-Type");
response.appendHeader("Access-Control-Max-Age", "3600");
response.setStatusCode(HttpURLConnection.HTTP_NO_CONTENT);
return;
} 
// Handle the main request.
BufferedWriter writer = response.getWriter();
writer.write("CORS headers set successfully!");
} 

Open规范如下:

代码语言:javascript
运行
复制
--- 
info:
  description: Sample API on API Gateway with a Google Cloud Functions backend
  title: trigger-post
  version: 1.0.0
paths:
  /triggerondemand:
    post:
      consumes:
        - application/json
      operationId: triggerondemand
      parameters:
        - description: triggerondemand.
          in: body
          name: ondemand
          schema:
            properties:
              fileStatus: 
                type: string
              
            type: object
      responses:
        '201':
          description: Created
      summary: triggerondemand
      x-google-backend:
        address: >-
          https://us-east1-neodev-305805.cloudfunctions.net/demand
produces:
  - application/json
schemes:
  - https
swagger: '2.0'

浏览器错误如下:

代码语言:javascript
运行
复制
Access to XMLHttpRequest at 'https://apitest.dev.app.com/triggerondemand' from origin 'https://dataplatform.dev.app.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-09 15:02:39

你们这两个问题的答案是,目前这是不可能的。

Gateway目前不支持对CORS的处理,尽管它在要实现的路线图中,但是您可以使用一个变通方法来完成这个社区回答

关于自定义身份验证,正如我在我在这里的回答中所讲的那样

不幸的是,Gateway没有为自定义身份验证提供这样的选项,为了使用API进行身份验证,您必须使用文档中提供的替代身份验证方法之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66999212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档