Java 12 中的“Windows 上的默认本机 GSS-API”能否通过使用执行 JVM 的用户的 Krb5 主体来支持带有 JAAS 的 SSO?

问题描述

Vanilla Krb5LoginModule 正在工作,提示输入凭据

到目前为止,在我对 JAAS -> jgss -> Kerberos -> Windows 的适度使用中,我已经设置了 Krb5LoginModule 时:

Subject.doAs(
    new LoginContext(...)).login(),// subject
    new MyPrivilegedAction()         // action
)

...提示我输入凭据,操作成功。

使用 TGT Session Key hack,可以避免提示输入凭据

如果我还在登录模块中添加useTicketCache=true,并且如果我忍受设置 HKEY_LOCAL_MACHINE\SYstem\CurrentControlSet\Control\Lsa\Kerberos\Parameters\AllowTgtSessionKey=1 的安全隐患并且不使用 Windows 10 Credential Guard,那么操作成功没有提示输入凭据。

Java 12 即使在 Windows 上也为我们提供了认的原生 GSS-API 库

Java 11.0.10 introduced using a native GSS-API implementation 在 Windows 上的可能性,但没有提供认实现。 Java 12 added a native implementation of GSS-API 桥接到 Windows sspI。这避免了对风险 AllowTGTSessionKey 的需要。

使用原生 GSS-API 也可以,提示输入凭据

在 Windows 上的 Java 15.0.2(Oracle 和 OpenJDK)上,尽管docs 仍然(现在错误地)声称,“没有众所周知的原生 GSS-API Windows 上的库”,我可以:

  • 省略 java.security.krb5.realmjava.security.krb5.kd 系统属性(我使用它们代替成熟的 kr5.conf,因为我的 AD 环境很简单);和
  • 只需指定 sun.security.jgss.native=true

...并且操作提示输入凭据,但成功。

但原生总是提示输入凭据

在使用 sun.security.jgss.native=true(在 Windows 上的 JDK 15.0.2 上)时,我是否可以预期 JAAS -> jgss -> Kerberos -> Windows 将尝试通过 sspI 使用 Windows LSASS 来获取执行 JVM 的用户的凭据?或者这不是原生 GSS-API -> sspI 库提供的便利吗?地上信息稀少!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)