我正在尝试通过我的 java 代码执行 kerberos 约束委派。我有一个 keytab 文件、附加到用户的 SPN,并为该用户启用了 SPN 的委派。当我尝试使用 Keytab 登录时,我得到了 SPN 的 TGT。但是,此票证上的“可转发”标志设置为 false。
为了模拟其他用户,我需要将此标志设置为 true。
注意:在 SPN 用户上设置了 ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION 标志。
非常感谢任何帮助。
private void tryKrb5Module() throws LoginException {
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("javax.security.auth.useSubjectCredsOnly","true");//has no impact
final Subject subject = new Subject();
final Krb5LoginModule krb5LoginModule = new Krb5LoginModule();
final Map<String,String> optionMap = new HashMap<String,String>();
optionMap.put("keyTab", "c:\\ticket\\delegationUser.keytab");
optionMap.put("principal", "TEST/TEST"); // default realm
optionMap.put("doNotPrompt", "true");
optionMap.put("refreshKrb5Config", "true");
optionMap.put("useTicketCache", "true");
optionMap.put("renewTGT", "true");
optionMap.put("useKeyTab", "true");
optionMap.put("storeKey", "true");
optionMap.put("isInitiator", "true");
krb5LoginModule.initialize(subject, null, new HashMap<String,String>(), optionMap);
boolean loginOk = krb5LoginModule.login();
System.out.println("======= login: " + loginOk);
boolean commitOk = krb5LoginModule.commit();
System.out.println("======= commit: " + commitOk);
System.out.println("======= Principal from subject: " + subject.getPrincipals());
}