【问题标题】:Kerberos setup and Spring SecurityKerberos 设置和 Spring Security
【发布时间】:2015-12-11 15:32:41
【问题描述】:

我是 Kerberos 的新手,但我需要向 Web 应用程序提供 SSO Kerberos 身份验证。 我的应用程序流程如下所示:

1) 用户在 url 上进行 GET

2) 检查是否有授权,如果没有则 401 WWW-Authenticate: Negotiate

3) 使用标头创建 KerberosServiceRequestToken

4) 使用 SpringSecurity KerberosServiceAuthenticationProvider 它尝试验证,但我总是遇到异常:

org.springframework.security.authentication.BadCredentialsException: GSSContext name of the context initiator is null

SpringSecurity 中的配置:

    public KerberosServiceAuthenticationProvider kerberosServiceAuthenticationProvider() {
    KerberosServiceAuthenticationProvider provider = new KerberosServiceAuthenticationProvider();
    provider.setTicketValidator(sunJaasKerberosTicketValidator());
    return provider;
}
public SunJaasKerberosTicketValidator sunJaasKerberosTicketValidator() {
    SunJaasKerberosTicketValidator validator = new SunJaasKerberosTicketValidator();
    validator.setServicePrincipal("HTTP/principal");
    validator.setKeyTabLocation(new ClassPathResource("kerberos/http-web.keytab"));
    validator.setDebug(true);
    return validator;
}

}

【问题讨论】:

  • 您的应用程序是否基于任何 Spring Security Kerberos 示例? - docs.spring.io/spring-security-kerberos/docs/1.0.1.RELEASE/…
  • 不完全是。我的应用程序分为两部分: - 前端是 Vaadin 应用程序 - 后端是 Spring REST (MVC) 应用程序 后端使用 spring security 和自定义 TokenFilter 进行保护。从浏览器获取的前端发送标头可以说:授权:协商 Y.. 后端验证标头,如果一切正常,则发回 Token 并允许用户执行请求。问题是我需要提供基于 Kerberos 的 SSO。我安装了活动目录,我需要通过 Kerberos 连接到它。第二件事是 AD 位于该应用程序的不同服务器上,但通过 VPN 可见
  • 如果您不太了解您的解决方案,我建议您按照链接中该列表中的示例 6,这是一个带有 Kerberos + AD 的 hello world。然后尝试与您现有的解决方案集成。
  • 我发现了这个问题 - 我实际上使用的是第 6 章中的示例(当前 1.0.2 快照),我更改了 YML 文件,我可以使用其他客户端浏览 AD,但是当我遇到此错误时使用 Firefox 访问应用程序(network.negotiate-auth.trusted-uris 设置为我的域)。我在域中的 Windows 计算机上运行演示(不在 DC 上)。这些示例对于 Kerberos 非专家来说是相当粗略的。我不知道我是否应该使用krb5.ini,或者当我在 Windows 上时是否需要 keytab 文件。

标签: spring spring-security kerberos


【解决方案1】:

将 keytab 位置更改为基于文件的位置并将其从类路径中删除。

这是一个示例:

validator.setKeyTabLocation(new FileSystemResource("kerberos/http-web.keytab"));

附:不要忘记在KerberosServiceAuthenticationProvider 中设置UserDetailService

如果这不能解决问题,请检查您的应用程序是否正在获取正确的 SPNEGO 令牌。除非所有其他设置都到位,否则您可能无法获得正确的令牌。

【讨论】:

    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 2015-08-19
    • 2014-04-15
    • 2014-06-02
    • 2014-03-22
    • 2011-01-09
    • 2011-09-02
    • 2018-11-11
    相关资源
    最近更新 更多