Java rest API,用于防止绕过Apigee的IP源控制

Java rest API,用于防止绕过Apigee的IP源控制,java,api,security,ip,apigee,Java,Api,Security,Ip,Apigee,我们已经使用Spring创建了一个RESTAPI。 没有实施任何安全措施 现在我们将使用Apigee进行API管理,它将提供各种服务,用于监控、安全等。 我们的所有客户机现在都应该使用Apigee调用我们的API,而不是直接在服务器上调用我们的服务 我们怎样才能确保绕过Apigee是不可能的 我想,在我们的代码中,我们可以有一个过滤器并使用“Access Control Allow Origin”属性,比如: public class OurFilter implements Filter {

我们已经使用Spring创建了一个RESTAPI。 没有实施任何安全措施

现在我们将使用Apigee进行API管理,它将提供各种服务,用于监控、安全等。 我们的所有客户机现在都应该使用Apigee调用我们的API,而不是直接在服务器上调用我们的服务

我们怎样才能确保绕过Apigee是不可能的

我想,在我们的代码中,我们可以有一个过滤器并使用“Access Control Allow Origin”属性,比如:

public class OurFilter implements Filter
{
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
            ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");
        chain.doFilter(req, res);
    }
}
其中“*”将替换为Apigee Ip、域名或其他内容

我的问题是这有多安全。人们可以只在http请求中添加一个头并直接成功地调用我们的服务器吗?或者它是否检查低级别单个“IP数据包”上的源IP

如果仅仅通过编辑http头是一个骗局,那么什么是使绕过Apigee变得不可能的正确方法呢


很多感谢

< P>你考虑使用的报头是启用的,这对于浏览器(客户端)来说是很重要的,但是它并不能为服务器端提供任何安全性。 如果您想保护后端API不被直接使用,那么必须在Apigee和后端API之间建立某种身份验证,以便后端API拒绝来自其他客户端的任何请求

有不同的选择,如何做到这一点。这取决于所需的安全级别和后端API的功能

例如:

  • 受IP地址限制-仅允许来自Apigee IP地址的请求
  • 使用共享密钥-当与后端API通信时,Apigee将添加一个包含密钥的头,该密钥由后端识别。这可能是最简单的解决方案,并提供了合理的安全级别。当然,假设通信仅通过HTTPS进行:)
  • 使用-这更安全,但也更复杂。Apigee端必须使用客户端证书对后端API进行身份验证