我在使用Kerberos和Webstart时遇到了麻烦。 我想获得当前在Windows用户上签名的Principal,并且API试图获得 来自票证缓存的tgt。
AllowTgtSessionKey在Registry中设置为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();
...
我做错了什么? 所有的罐子都签了!
感谢您的帮助。
此致 霍尔格
答案 0 :(得分:-1)
使用Web Start启动应用程序时,它位于具有降低权限的applet上下文中。
您需要签署您的jar以允许jaas登录。
此处示例http://www.narendranaidu.com/2007/11/3-easy-steps-to-self-sign-applet-jar.html