【问题标题】:How to implement Spring's pre-authentication filter?Spring的预认证过滤器如何实现?
【发布时间】:2013-12-09 19:59:13
【问题描述】:

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

我们在请求标头中以 XML 形式获取身份验证详细信息,其中包含名字、姓氏、用户 ID 和错误标记(如果发生)。

我正在扩展 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>
    

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

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

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

【问题讨论】:

标签: java spring web-applications spring-security


【解决方案1】:

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

我一直在玩一个实现。你可以在这里找到它: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 时)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 2019-04-06
    • 1970-01-01
    • 2023-03-09
    • 2012-08-15
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    相关资源
    最近更新 更多