我在使用带有 Webstart 的 Kerberos 时遇到问题。我想获取当前已登录 Windows 用户的 Principal,并且 API 尝试从票证缓存中获取 tgt。
AllowTgtSessionKey 在注册表中设置为 1。
使用普通的 Java 应用程序一切正常,我得到了票并且可以使用主体。
但是当我将我的应用程序部署为 Webstart 时,我无法从缓存中获取票证并在调用 LoginContext#login 时获得 LoginException。
这是我的代码:
配置:
private static Configuration getProgramaticLoginConfig()
{
HashMap<String, String> options = new HashMap<String, String>();
options.put("useTicketCache", "true");
options.put("doNotPrompt", "true");
options.put("debug","true");
AppConfigurationEntry krb5LoginModule = new AppConfigurationEntry("com.sun.security.auth.module.Krb5LoginModule", LoginModuleControlFlag.REQUIRED, options);
final AppConfigurationEntry[] aces = new AppConfigurationEntry[]{krb5LoginModule};
Configuration progConfig = new Configuration()
{
@Override
public AppConfigurationEntry[] getAppConfigurationEntry(String arg0)
{
return aces;
}
};
return progConfig;
}
这是我的代码:
LoginContext lc = null;
try {
// create a LoginContext
lc = new LoginContext("asdjfkasdjkfasdö",new DialogCallbackHandler());
} catch(Exception e) {
log.error("Initialisierung fehlgeschlagen",e);
}
try {
// login (effectively populating the Subject)
lc.login();
} catch(LoginException e) {
log.error("Login failed",e);
}
try {
//get the Subject that represents the signed-on user
Subject signedOnUserSubject = lc.getSubject();
...
我究竟做错了什么?所有的罐子都签名了!
谢谢你的帮助。
问候,霍尔格