我有一个基本的html,其中包含一个表单。此表单提交由RESTful后端api服务(用spring boot编写)处理。出于商业原因,html页面不受保护 - 无法在HTML上应用任何类型的身份验证/登录机制。我怎样才能确定,只允许html命中后端API,而不是其他来源? html和后端apis都在同一个域下。示例 - example.com/index.html; example.com/getStudentList
答案 0 :(得分:0)
我怎样才能确定,只允许html命中后端API,而不是其他来源?
如果我理解正确,您不希望API的使用者通过API进行身份验证,原因是什么?但你想要的是任何加载索引页面的客户端都可以访问API。
我能想到的最接近的实现就像是一次性处理API网址一样:你动态生成html页面,其中包含一些难以猜测的令牌。当API收到任何请求时,它会检查令牌 - 如果没有令牌,它会拒绝该请求(403 - 禁止)。如果有令牌,它会检查该令牌是否仍然有效;如果令牌过期,则拒绝该请求。如果令牌处于非活动状态,但在某个宽限期内,您可以将API请求重定向到具有较新令牌的URL(301 - 永久移动)。如果令牌处于活动状态,则表示您提供了请求。
Mark Seemann在尝试解决另一个问题时写了一篇不错的小文章:Avoiding Hackable URLs。
如果这对你来说听起来像会话cookie - 嗯,你没错。说实话,我怀疑差异是微妙的,发现我夸大它们并不会感到惊讶。主要区别在于我们将缓存失效和资源生命周期等内容明确地传达给中间组件。另一方面,Cookie标头实际上是不透明的。
这个答案肯定是不完美的 - 任何碰巧猜测当前活动网址的人都能够访问API,无论他们是否访问索引页面。不安全,而不是安全。
但是,在你有合理的要求之前,这可能足以让你度过难关。