当前位置: 首页 > 知识库问答 >
问题:

Kubernetes-保护后端APIendpoint(MERN应用程序)

郜玉石
2023-03-14

我已经使用MERN制作了一个全栈web应用程序,并使用Kubernetes集群进行部署。

除了一个问题外,应用程序运行良好。 也就是说,我(作为用户)能够从浏览器(如www.domain-name/API/orders)访问API,它给我提供JSON响应。

这是我不想要的。 我要把这个藏起来/限制起来。

我使用NGINX-INGRESS路由为:

apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
    name: ingress-service 
    annotations: 
        kubernetes.io/ingress.class: nginx 
        nginx.ingress.kubernetes.io/use-regex: 'true'
spec: 
    rules: 
        - host: shopify.dev 
          http: 
            paths:
                - path: /api/users/?(.*) 
                  backend: 
                    serviceName: auth-srv 
                    servicePort: 3000
                - path: /api/orders/?(.*)
                  backend: 
                    serviceName: orders-srv
                    servicePort: 3000
                - path: /?(.*) 
                  backend: 
                    serviceName: client-srv
                    servicePort: 3000 

由于请求/API和/*(前端)都是通过nginx-ingress路由的,这是不是应该是这样工作的? 对此有何解决之道?

共有1个答案

龙飞
2023-03-14

在浏览器中运行的客户端应用程序应该能够从API中获取数据,因此很明显,无论是您的应用程序发出请求,还是您(作为用户)从同一浏览器(或另一个rest客户端)发出请求,它都将通过(假设遵循相同的身份验证过程)。

如果是不可能完全阻止它,它不应该被要求,因为用户将仍然有访问相同的数据,无论是通过应用程序或直接。

但是,如果您希望隐藏它,因为您不希望普通用户在期待一个漂亮的前端应用程序时看到一些奇怪的json响应,那么您可以将该逻辑实现到您的应用程序中。

您可以这样做的方法是在前端应用程序发出的所有请求中包括一些自定义HTTP头(在AXIOS/FETCH调用中),然后实现一个过滤逻辑,该逻辑将解析该头,以查看调用是从前端应用程序发出的还是直接发出的(可能是一个中间件,如果用户看到没有该头的请求,它会将用户重定向到根页面)。 我以前用过这个解决方案,它工作得很好。

但再次注意,这与安全性无关,因为您的数据已经在前端应用程序中可用。 而且,它与kubernetes本身无关,任何高级用户都能够伪造这样的请求,从而绕过这个解决方案。 您的数据应该通过身份验证来保护,而不是通过一些html文档来保护。

 类似资料:
  • 首先,让我确保这不是以下问题的重复so:确保仅从iPhone访问 简而言之,我有一个应用程序使后端查找。在开发它时,我对数据使用了AES-256加密,这样只有应用程序可以读取来自后端的响应,即对来自服务器的JSON进行了加密。 在发布应用的时候,iOS发布流程说“没有证书(我猜这真的很难得到),你的应用中不能有任何类型的加密,除非是为了用户身份验证,那就OK了”。 这就不符合我的策略,坦率地说,也

  • 我正在使用KeyClope来保护我的Spring Boot rest应用程序。 该应用程序还具有React前端。 我的问题是-前端是否也应该使用KeyClope进行保护? 如果没有,您将在何时保护前端和后端?

  • 我正在使用Java、Spring、Struts2和Hibernate设计一个多租户SaaS Web应用程序。经过一些研究,我选择在共享数据库、共享模式、共享表的方法中实现多租户。并用tenantid标记每个db行。 我已经重写了我的应用程序,所以管理者和DAO将把tenantId作为一个参数,只为正确的数据库资源服务。 当获取信息时,这对所有视图来说都是完美的。也用于创建新的东西(使用登录的用户t

  • 如果在类路径上添加了Spring Boot Security依赖项,则Spring Boot应用程序会自动要求对所有HTTP端点进行基本身份验证。 端点“/”和“/ home”不需要任何身份验证。 所有其他端点都需要身份验证。 要将Spring Boot Security添加到Spring Boot应用程序,我们需要在构建配置文件中添加Spring Boot Starter Security依赖项

  • 本文向大家介绍基于Spring Boot保护Web应用程序,包括了基于Spring Boot保护Web应用程序的使用技巧和注意事项,需要的朋友参考一下 如果在类路径上添加了Spring Boot Security依赖项,则Spring Boot应用程序会自动为所有HTTP端点提供基本身份验证。端点“/”和“/home”不需要任何身份验证。所有其他端点都需要身份验证。 要将Spring Boot S

  • 我有几个Azure Functions,我想使用Azure AD对其应用身份验证。在用户模拟身份验证方面,我已经成功做到了这一点。但不幸的是,我无法从尝试访问Azure Functions的守护程序应用程序中获得同样的工作。 我的守护程序应用程序在Azure AD中注册,并公开应用程序范围。基本上,我有其他构建为应用程序服务的API,可以从守护程序应用程序成功地进行身份验证。我为Azure功能应用

  • 空闲超时后如何实现客户端服务注销? 服务由KeyClope应用程序网关保护。 网关是节点。js应用程序,使用KeyClope节点保护服务的URL。js适配器,以便在浏览器访问URL时需要身份验证。(重定向到登录url) 服务通过检查访问令牌网关中存在的角色来本地强制授权,并在成功验证后将其附加到请求。 钥匙斗篷也在大门后面。 我考虑在keydape代码中添加自定义事件监听器,它将通过一些消息总线通

  • 目前我有一个使用msal对用户进行身份验证的react前端。js(Azure AD B2C)。后端API是用.NET Core构建的,目前任何人都可以访问。 我想保护API,这样只有在前端经过身份验证的用户才能访问API。 有没有关于如何实现这一点的文档/示例应用程序?