WebstartでKerberosを使用するのに問題があります。現在署名されているWindowsユーザーのプリンシパルを取得したいのですが、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();
...
私は何が間違っているのですか?すべての瓶は署名されています!
あなたの助けのためのThx。
よろしく、ホルガー