Keberos 身份验证不适用于 springboot 应用程序

时间:2021-01-30 10:56:27

标签: kerberos kerberos-delegation spring-security-kerberos mit-kerberos

我正在尝试使用 kerberos 使我的 springboot 应用程序工作。 我有一个在 docker 容器中运行的 apache kerby。

我已通过命令将 SPN 添加到我的 kerberos 数据库中,

<块引用>

addprinc -randkey -pw 密码 HTTP/staging-example.com@EXAMPLE.COM

并通过命令创建了一个密钥表文件,

<块引用>

xst -norandkey -k https.keytab HTTP/staging-example.com@EXAMPLE.COM

我可以通过 kinit 命令接收 tgt, kinit -kt https.keytab HTTP/staging-example.com@EXAMPLE.COM

当我执行 klist 时,我能够看到 tgt。

这确认我的 kdc 服务器运行良好。

我正在尝试通过 SPNEGO 将我的 kdc 与我的应用程序连接起来。 我提供了 krb5.conf 文件和 keytab 文件作为应用程序的 env 变量。

我的krb5.conf文件如下:

[libdefaults]
    kdc_realm = EXAMPLE.COM
    default_realm = EXAMPLE.COM
    kdc_udp_port = 4000
    kdc_tcp_port = 4000
    pkinit_anchors = /etc/krb5/cacert.pem
    ticket_lifetime = 3600

[realms]
    EXAMPLE.COM = {
        kdc = ip:port
    }
[domain_realm]
    .EXAMPLE.COM = EXAMPLE.COM

现在,当我尝试从浏览器(chrome 或 IE)访问应用程序时,会出现用户名密码的弹出窗口,但在输入用户名密码后不久,我的应用程序抛出错误:

<块引用>

协商头无效:协商 TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKALpHAAAADw== org.springframework.security.authentication.BadCredentialsException: Kerberos 验证不成功

引起:org.ietf.jgss.GSSException:检测到有缺陷的令牌 (机制层面:GSSHeader 没有找到正确的标签)

根据我的理解,kerberos 验证失败,因此 正在使用 NTLM 令牌。

我认为我的应用程序无法访问 kdc 服务器。 如果我将 krb5.conf 文件导出为 KRB5_CONFIG 并 kinit 用户,则它可以正常工作。它工作正常。

PS:我已经让我的浏览器 kerberos 知道这篇文章: https://docs.cloudera.com/documentation/enterprise/5-12-x/topics/cdh_sg_browser_access_kerberos_protected_url.html

是否有任何浏览器设置或访问服务器所需的任何额外设置。

编辑:kdc 在 kubernetes 集群上运行。应用的 DNS 是谷歌云 DNS(A 记录)。

0 个答案:

没有答案