java - 两种身份验证机制 : Kerberos and HTTP basic

标签 java spring authentication

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

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

到目前为止一切正常。

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

可能我需要有两个入口点(例如,用于 SSO 的“/login”和用于 HTTP basic 的“/login-userpass”)。这是正确的做法吗?或者还有其他方法可以实现吗?

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

编辑: 实际上,这是一个duplicated question 。并且接受的答案完美无缺。

最佳答案

我没有将 Kerberos 与 Spring 一起使用,但我之前已经使用基本、表单和 CA SSO 实现了一个应用程序。然而,如果不查看一些代码,特别是 WebSecurityConfigurerAdapter,我只能给出一般指导方针。

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

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

在 Spring 4 中,AuthenticationProvider 是使用 AuthenticationManagerBuilder 配置的,这是在 WebSecurityConfigurerAdapter 的 configure 方法中完成的,您需要重写该方法。

请记住,您可以拥有一个过滤器和多个 AuthenticationProvider,也可以拥有多个过滤器和一个 AuthenticationProvider,具体取决于您的需要。

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

关于java - 两种身份验证机制 : Kerberos and HTTP basic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41502187/

相关文章:

java - 二维碰撞速成类

java - 当返回类型为 ModelAndView 时返回一个字符串

java - 不同JDK版本的Maven编译

Java认证: How to override methods that define a throws exception?

作为共享 Pub/Sub 的 Spring 集成服务接口(interface)网关回复 channel

java - Spring Boot 有界自动配置

java - 为什么 Hibernate 对惰性关系属性字段执行 SELECT 查询

Java登录程序

PHP登录问题

c# - 使用 MySQL 服务器在 C# 中创建登录表单(主要问题)?