如何实现Spring的预身份验证过滤器?

时间:2013-11-25 07:50:19

标签: java spring web-applications spring-security

我正在尝试在我们的Web应用程序中实现预先验证的安全性,但我不确定如何正确执行。那里没有那么多例子。那些似乎比我们更简单的设置。

我们将请求标头中的身份验证详细信息作为带有名字,姓氏,用户ID和错误标记的XML(如果有的话)。

我正在扩展AbstractPreAuthenticatedProcessingFilter并在其getPreAuthenticatedPrincipal()中提取标题,解组并进行一些验证。

现在问题:

  • 如果一切正常,我是否只是从getPreAuthenticatedPrincipal()返回我的未编组的shibboleth?
  • 如果出现问题,我是否只会抛出PreAuthenticatedCredentialsNotFoundException
  • 我从getPreAuthenticatedCredentials()返回什么? "N/A"是否足够?

我想在某些时候我不能创建AuthenticationPrincipal

  • 这是一个好方法吗?

    Principal dynamicUser = new DynamicUser(rijksregisterNummer);
    List<SimpleGrantedAuthority> grantedAuthorities = Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"));
    Authentication authentication = new AnonymousAuthenticationToken(rijksregisterNummer, dynamicUser, grantedAuthorities);
    
  • 我在Spring Security中设置了什么时候(在哪个类中)?

  • 我还需要扩展哪些课程?

  • 如何配置Spring Security配置XML?像这样?我错过了什么?

    <http>
      <custom-filter position="PRE_AUTH_FILTER" ref="myPreAuthFilter" />
    </http>
    
    <bean id="myPreAuthFilter" class="my.package.MyPreAuthenticationFilter">
      <property name="authenticationManager" ref="authenticationManager"/>
    </bean>
    
    <authentication-manager alias="authenticationManager">
      <authentication-provider ref="customAuthenticationProvider"/>
    </authentication-manager>
    

外部用户进行预身份验证(使用电子身份证和读卡器),然后点击我们的网络应用程序。但是,内部用户必须使用uername和密码进行身份验证,这是一种正常的身份验证过程。

  • 如何设置当没有shibboleth(因此从我们的内部用户登录)时,我可以显示登录表单?

很多问题,我知道。我希望你能指导我。

1 个答案:

答案 0 :(得分:2)

这是一个老问题但仍然相关。如上所述,有很多问题。引起我注意的是观察到没有很多示例实现。

我一直在玩一个实现。您可以在此处找到它:https://github.com/klaalo/reqTokenAuth

可以轻松地与WebSecurityConfigurerAdapter上的身份验证方法进行混合和匹配,以便您可以为传统用户进行传统的基于表单的身份验证。

该实现基于Apache mod_auth_openidc位于应用程序前面的设置。但是,实现应该与Shibboleth SP一起正常工作。

我没有充分了解您在HTTP请求标头中将身份验证详细信息作为XML发送的情绪。 Shibboleth SP是关于SAML身份验证的。您应该保留有关SAML SP身份验证的详细信息,并且只能享受应用程序中经过身份验证的用户的好处。没有必要解组XML,Shibboleth会为你做这件事。您将用户详细信息视为干净字符串,表示HTTP标头中的SAML属性值或HttpServletRequest属性(使用Tomcat / AJP时)。