【发布时间】:2021-01-15 09:12:49
【问题描述】:
我有一个带有自定义身份验证的 Spring Boot 应用程序。我正在使用 Servlet 过滤器拦截 API 请求并验证发送的请求令牌。我还在客户端的请求标头中请求Nonce,这是客户端在每次 API 调用中发送的唯一值。
我想知道是否有检查标头中收到的 Nonce 的标准方法。我想避免使用 Nonce 进行重放攻击。
我能想到的一个实现是 - 将收到的 Nonce 存储在请求中 1 分钟/在内存中维护 100 个请求的 LRU 缓存并确保它不会再次收到。
如果您能向我指出一些很好的资源来检查 Nonce 的好方法,那将会很有帮助。
MySecurityFilter
@Component
@Order(1)
public class MySecurityFilter implements Filter {
private static final Logger LOGGER = LoggerFactory.getLogger(MySecurityFilter.class);
private static final String NONCE_PARAMETER_NAME = "x-nonce";
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String nonce = getHeaderValue(req, NONCE_PARAMETER_NAME);
//TODO: Validate Nonce
chain.doFilter(request, response);
}
//...
}
PS:我没有使用 Spring 安全性进行 API 验证,因为我的用例中不需要它。
【问题讨论】:
标签: spring spring-boot security nonce api-security