两种身份验证机制:Kerberos和HTTP基础

时间:2017-01-06 09:02:54

标签: java spring authentication

我有一个springboot应用程序,它使用spring-security-ldap通常的HTTP基本身份验证。

后来我将其修改为使用spring-security-kerberos-corespring-security-kerberos-web进行单点登录(Kerberos)身份验证。

到目前为止一切正常。

现在我需要使用这两种机制。我们的想法是将SSO用于前端应用程序,以便用户自动登录。并使用HTTP基本(用户名/密码)进行REST接口或测试。

可能我需要有两个入口点(例如' / login'用于SSO和' / login-userpass'用于HTTP基础)。这是一种正确的方法吗?还是有其他方法来实现它?

在我看来,这是一个常见的要求,但我无法找到如何实现这一点的示例。

编辑: 实际上,它是duplicated question。接受的答案非常有效。

1 个答案:

答案 0 :(得分:1)

我没有在Spring中使用Kerberos,但我之前已经实现了一个基本,表单和CA SSO的应用程序。但是,如果不查看某些代码,特别是WebSecurityConfigurerAdapter,我只能提供一般指导。

使用Spring,您需要将许多身份验证过滤器映射到不同的URL,这些过滤器将拦截登录,在需要时执行401质询,然后创建未经身份验证的身份验证实例。典型的过滤器是BasicAuthenticationFilter和UsernamePasswordAuthenticationFilter,您需要找到KerBeros的过滤器。

稍后,未经身份验证的身份验证将提供给AuthenticationProviderManager,后者会找到相应的AuthenticationProvider来执行身份验证。这是使用密码哈希(可能是SSO回调)进行数据库查询的地方,如果用户通过身份验证,则创建新的身份验证,通常您需要扩展AbstractAuthenticationToken或选择现有身份验证之一。请记住复制未经身份验证的身份验证的详细信息。

在Spring 4中,AuthenticationProvider使用AuthenticationManagerBuilder进行配置,这在您需要覆盖的WebSecurityConfigurerAdapter的configure方法中完成。

请记住,根据您的需要,您可以拥有一个过滤器和许多AuthenticationProviders或许多过滤器和一个AuthenticationProvider。

我目前可以访问的应用程序只有一个表单登录,但是一些额外的隐藏字段(以及会话中的内容)控制4个可用的AuthenticationProviders中的哪一个负责身份验证,并创建不同的身份验证类基于哪个提供程序对用户进行身份验证,因此我们可以将应用程序的某些区域限制为特定的身份验证类型