由于这个问题有点难,我想你已经熟悉了Spring Security Kerberos 示例 https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples显示如何使用表单身份验证作为后备来配置 kerberos 身份验证。
我没有证据表明它会起作用,但我认为您应该能够将您的 kerberos 身份验证与基本身份验证链接起来,没有任何问题。对此我分享一下我的想法...
想法 1:过滤器链
支持多种身份验证方法的技巧是正确设置身份验证过滤器的顺序。
如果顺序错误,客户端可能会挂起基本身份验证,并且可能永远无法到达 kerberos 身份验证过滤器,因为会弹出浏览器的基本身份验证对话框。这可能有点取决于基本身份验证提供程序和过滤器在 Spring 中的实现方式。无论如何,如果顺序正确,kerberos 过滤器(基本身份验证过滤器)之后的链中的下一个过滤器将开始工作。
想法 2:Kerberos 身份验证不应破坏基本身份验证
浏览器应将与 kerberos 服务提供者的通信与与基本身份验证提供者的通信区别对待,因为协议不同。
SAML 通信运行在它有自己的命名空间 http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-kerberos-browser-sso.html,因此在我看来,它不应该影响基于 HTTP 标头中的授权元素的基本身份验证通信。
EDIT: 即使有关命名空间的假设在浏览器行为中没有发挥任何作用,步骤 6 中的顺序图 http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-kerberos-browser-sso.html将是一个关键点。当过滤器链接正确时,Spring 应该返回 401 响应,例如 401 - Access denied - WWW-authenticate - Basic realm = "your domain"
这将迫使您的浏览器进入基本身份验证。
想法 3:Spring Security Kerberos 中的 Spnego 协商
The Spnego配置 http://docs.spring.io/spring-security-kerberos/docs/1.0.0.RELEASE/reference/htmlsingle/#ssk-spnegoSpring Security Kerberos 文档中的内容实际上是基于这些想法构建的。这也可以在示例中看到,即第 49 行和第 50 行这个WebSecurityConfig.java https://github.com/spring-projects/spring-security-kerberos/blob/master/spring-security-kerberos-samples/sec-server-spnego-form-auth/src/main/java/demo/app/WebSecurityConfig.java
如果您遇到麻烦,我会感到惊讶。
最后一个想法
如果没有要求强制您进行基本身份验证,我建议不要使用它。最好继续使用基于令牌的身份验证。即使我不完全同意该博客的所有细节,它也解释了为什么不应使用基本身份验证 http://adrianotto.com/2013/02/why-http-basic-auth-is-bad/,如果你能避免的话。