Spring boot 防止直接调用我的spring boot rest API

Spring boot 防止直接调用我的spring boot rest API,spring-boot,security,Spring Boot,Security,我有几个由javascript文件(网站)使用的REST服务(在SpringBoot上),任何人都可以直接调用这些服务(在任何浏览器上都可以通过Developer控制台看到API url/参数)。 因此,我想防止直接调用API,当然,我的应用程序前端除外 我看到我可以使用带有spring安全性的API密钥,但它可靠吗?因为我认为如果您使用Developer console截取消息,您可以看到密钥。您可以执行以下操作: 在springboot应用程序中禁用CORS,方法是按照您的意愿全局或每个端

我有几个由javascript文件(网站)使用的REST服务(在SpringBoot上),任何人都可以直接调用这些服务(在任何浏览器上都可以通过Developer控制台看到API url/参数)。 因此,我想防止直接调用API,当然,我的应用程序前端除外


我看到我可以使用带有spring安全性的API密钥,但它可靠吗?因为我认为如果您使用Developer console截取消息,您可以看到密钥。

您可以执行以下操作:

  • 在springboot应用程序中禁用CORS,方法是按照您的意愿全局或每个端点设置以下值
要设置每个端点的COR,请执行以下操作:

@CrossOrigin(origins = "http://localhost:9000")
@GetMapping("/greeting")
public Test testing(@RequestParam(required=false, defaultValue="Test") String name) {
    System.out.println("in test");
    return new Testing(10, String.format(template, name));
}
  • 您可以使用spring安全性对控制器端点进行预授权,以确保只有经过授权的用户才能访问控制器
例如:

@RestController
@RequestMapping({"/v2/"})
public class ExampleTestController {
    @PreAuthorize("hasAuthority('ROLE_ADMIN')")
    @RequestMapping(value = "/test", method = RequestMethod.GET)
    String test() {
        return "Hello";
    }
}
使用spring security是安全的,因为在授予访问权限之前,用户总是经过验证。即使在使用Oath2时,密钥也是在验证用户登录之后生成的,并且该密钥可以通过在头中传递请求或在rest模板中使用来验证发送给控制器的每个请求

  • 隔离rest端点的另一种方法是使用负载平衡器(或ngnix或任何东西)阻止来自域外的对这些端点的请求

您没有任何授权或安全机制吗?没有登录吗?没有,没有登录,因此没有授予安全性或授权。如果要避免这种情况,唯一的方法是添加某种身份验证。正如您所说,API密钥会有所帮助,因为它很容易捕获。您不能,您的浏览器也会直接执行这些请求,因此您无法可靠地区分直接执行这些调用的人和您的浏览器(因为web是无状态的)。不管怎么说,这听起来像是一个错误。你能解释一下为什么要阻止直接呼叫吗?因为我有POST服务可以添加/修改数据库中的数据。我没有任何删除服务,但我认为这样暴露仍然令人担忧。我有一个CORS控件,因为前端似乎必须能够调用API。因此,我已经将网站的域名添加到CORS配置中,但我仍然可以直接调用API。我的CORS似乎可以工作,因为当我在localhost:3000上部署站点时,我会有一个CORS错误,除非我在我的CORS过滤器上添加localhost:3000。他没有Spring安全设置@哦,那根本不安全!如果你没有安全系统,请先这样做。SpringSecurity很容易采用,而且有很多指南。好的,我再补充一下!所以,如果我将spring安全性用于Cors控制,这将阻止直接调用我的API?唯一允许的调用将来自我将放入CORS配置中的域?是的,您可以在spring中配置所有内容。请阅读文档。您可以将本地主机更改为您选择的域。