正如我们所知,Rest 服务是无状态的,一般的身份验证策略是使用基于 token 的身份验证。
在登录服务中,它需要返回 token 的凭据。
此 token 可能设置在客户端 cookie 中,所有后续请求都使用此 token 进行验证并在 token 有效时处理新请求。
现在我的问题是如何验证 token ?如果有人窃取了 token 并试图通过仅编辑 cookie 来使用窃取的 token 访问休息服务,那么如何识别和限制它?
我们永远无法知道 token 是否由有效用户获取并且同一用户正在尝试访问后续请求。但是有什么方法可以让它变得更难,比如验证请求是否来自同一来源?
一个普遍的建议是为 token /cookies设置老化,但直到那个 token /cookies的年龄它仍然没有帮助。
如有任何建议,我们将不胜感激。
最佳答案
我认为没有任何 100% 万无一失的方法可以防止使用被盗用户 token 进行访问。你怎么知道 token 首先被盗了?但从我的头脑来看,您可能需要考虑以下内容:
- 使用相同的 token 但不同的用户代理访问 REST 服务是可疑的。这可以通过 User-Agent header 的值来识别。您可能需要考虑放弃此类请求。
- 如果 IP 地址更改但 token 仍然相同怎么办?好吧,也许有人正在使用负载均衡器并通过不同的 IP 地址访问网络?或者他使用与以前相同的 token /cookie 访问 VPN?如果您不后悔放弃此类请求,您也可以通过检查源 IP 地址来提高安全性。
- 如果是 JWT token ,您将需要一些基础设施来处理黑名单。关注this .
关于java - 如何防止使用被盗 token 进行 Rest Web 服务身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60111743/