java - 如何防止使用被盗 token 进行 Rest Web 服务身份验证

标签 java rest security authentication restful-authentication

正如我们所知,Rest 服务是无状态的,一般的身份验证策略是使用基于 token 的身份验证。

在登录服务中,它需要返回 token 的凭据。

此 token 可能设置在客户端 cookie 中,所有后续请求都使用此 token 进行验证并在 token 有效时处理新请求。

现在我的问题是如何验证 token ?如果有人窃取了 token 并试图通过仅编辑 cookie 来使用窃取的 token 访问休息服务,那么如何识别和限制它?

我们永远无法知道 token 是否由有效用户获取并且同一用户正在尝试访问后续请求。但是有什么方法可以让它变得更难,比如验证请求是否来自同一来源?

一个普遍的建议是为 token /cookies设置老化,但直到那个 token /cookies的年龄它仍然没有帮助。

如有任何建议,我们将不胜感激。

最佳答案

我认为没有任何 100% 万无一失的方法可以防止使用被盗用户 token 进行访问。你怎么知道 token 首先被盗了?但从我的头脑来看,您可能需要考虑以下内容:

  1. 使用相同的 token 但不同的用户代理访问 REST 服务是可疑的。这可以通过 User-Agent header 的值来识别。您可能需要考虑放弃此类请求。
  2. 如果 IP 地址更改但 token 仍然相同怎么办?好吧,也许有人正在使用负载均衡器并通过不同的 IP 地址访问网络?或者他使用与以前相同的 token /cookie 访问 VPN?如果您不后悔放弃此类请求,您也可以通过检查源 IP 地址来提高安全性。
  3. 如果是 JWT token ,您将需要一些基础设施来处理黑名单。关注this .

关于java - 如何防止使用被盗 token 进行 Rest Web 服务身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60111743/

相关文章:

java - 如何在执行 java 代码时省略一些 System.out/logging 语句?

java - 不要从父类(super class)构造函数中调用子类方法

java - 轻松路径 JBoss

node.js - HttpClient 订阅的响应 header 未定义

php - 如何防止 PHP 中的 SQL 注入(inject)?

java - 在 Java 中转换为 2D 对象数组

java - 使用 ReSTLet 客户端发送二进制数据

java - JAX-RS - Wink - 使用 Wink 客户端读取文件的正确方法

iphone - iPhone SQLite 数据库中包含的安全信息

java - 如何保护 Java EE 中的 WebSocket 端点?