奇怪的AbstractPreAuthenticatedProcessingFilter假设

时间:2013-12-04 08:41:31

标签: java spring http spring-security

我调查了与AbstractPreAuthenticatedProcessingFilter相关的Spring Security实现,我不得不承认我很困惑。让我们关注名为requiresAuthentication的方法,因为基于它返回的值将进行或不进行身份验证。

由于:

if (currentUser.getName().equals(principal)) {
   return false;
}
当equals principal存储在SecurityContextHolder(本地线程)中时,永远不会执行

身份验证。当出现这种情况时,这是非常有效的情况。接下来会发生什么?过滤器假定相同的主体(过去验证)不需要再次进行身份验证。如果在AuthenticationProvider中实现的逻辑是关键的,并且可分配的权限可能会随着时间的推移而快速变化,那该怎么办?

我知道通过实现任何类(因为principal被引用为Object)可以很容易地绕过这个“行为”,它不会覆盖Object的equals方法。不过,我想确定我会错过什么,因为从我目前的观点来看,这是一个很大的错误。如果我的怀疑是正确的,那么以下所有实现都可能导致安全问题:

  • J2eePreAuthenticatedProcessingFilter
  • WebSpherePreAuthenticatedProcessingFilter
  • RequestHeaderAuthenticationFilter

X509AuthenticationFilter正常工作,因为两个不同的X509Certificate从不等于。

罗伯特

0 个答案:

没有答案