我正在尝试在我们的Web应用程序中实现预先验证的安全性,但我不确定如何正确执行。那里没有那么多例子。那些似乎比我们更简单的设置。
我们将请求标头中的身份验证详细信息作为带有名字,姓氏,用户ID和错误标记的XML(如果有的话)。
我正在扩展AbstractPreAuthenticatedProcessingFilter
并在其getPreAuthenticatedPrincipal()
中提取标题,解组并进行一些验证。
现在问题:
getPreAuthenticatedPrincipal()
返回我的未编组的shibboleth?PreAuthenticatedCredentialsNotFoundException
?getPreAuthenticatedCredentials()
返回什么? "N/A"
是否足够?我想在某些时候我不能创建Authentication
和Principal
。
这是一个好方法吗?
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和密码进行身份验证,这是一种正常的身份验证过程。
很多问题,我知道。我希望你能指导我。
答案 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时)。