我正在寻找在Java客户端中的单点登录身份验证。
由于我已经使用AD登录到Windows,主要目标是不必再次输入用户名和密码。我希望Java使用我在Windows登录时接收到的票证。以下代码是我找到的最好的实现方式:
LoginContext lc = new LoginContext("com.sun.security.jgss.krb5.initiate", new DialogCallbackHandler());
lc.login();
Subject.doAs(lc.getSubject(), (PrivilegedExceptionAction<Void>) () -> {
System.out.println("This is privileged");
return null;
});
我已经设置了相应的配置文件中的java.security.krb5.conf
和java.security.auth.login.config
属性,但是仍然弹出一个要求输入用户名和密码的对话框。
我也尝试使用GSSName
,但是GSSManager.createCredential()
也要求输入用户名和密码(可能是使用TextCallbackHandler()
)。
我尝试使用Waffle,但没有成功。大多数示例和说明都是服务器端的(我只找到了一个将服务器和客户端结合起来的示例,但我无法将其分开)。
我知道有类似的问题(例如这个),但我无法在不输入密码的情况下使其工作。
PS:我知道DialogCallbackHandler
已被弃用,我仅用它进行测试目的。
kinit
,我可以创建一个票据缓存,并且能够在Java中使用所创建的票据。但是我仍然需要输入密码,而且票据缓存只有几个小时的有效期... - Dániel Somogyi