我有几个由 javascript 文件(网站)使用的 REST 服务(在 Spring Boot 上),任何人都可以直接调用这些服务(并且您可以在任何浏览器上使用开发者控制台查看 API url/参数)。 所以我想阻止直接调用 API,当然除了我的应用程序的前端。
我看到我可以使用 Spring Security 的 API 密钥,但它可靠吗?因为我认为如果您使用开发者控制台拦截该消息,您可以看到密钥。
您可以执行以下操作:
设置每个端点的 CORS :
@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));
}
例如:
@RestController
@RequestMapping({"/v2/"})
public class ExampleTestController {
@PreAuthorize("hasAuthority('ROLE_ADMIN')")
@RequestMapping(value = "/test", method = RequestMethod.GET)
String test() {
return "Hello";
}
}
使用 Spring Security 是安全的,因为在授予访问权限之前始终会验证用户。即使使用 Oath2,生成的密钥也是在验证用户登录之后生成的,并且该密钥可用于通过将其传递到标头或在其余模板中使用来验证对控制器的每个请求。
通过 HttpServlet 请求获取所有标头
对于邮递员,请检查邮递员令牌标头密钥
String.valueOf(allHeadersValues).contains("postman") 可以工作,但会对系统性能产生负面影响
对于其他人,测试 DNT 标头密钥