为了账号安全,请及时绑定邮箱和手机立即绑定

Kerberos 委派:GSSUtil.createSubject 仅返回主体名称

Kerberos 委派:GSSUtil.createSubject 仅返回主体名称

哈士奇WWW 2022-12-15 15:21:02
我正在做 kerberos 委派。我注意到它GSSUtil.createSubject(context.getSrcName(), clientCred)返回一个没有凭据的主题。在此之前,我已经完成GSSCredential clientCred = context.getDelegCred();了返回凭据的操作。编辑:当我从同一域中的一台机器访问我的服务时,它可以工作,而如果从同一域中的其他机器访问,它就不会。对 AD 需要哪些额外设置感到困惑?非常感谢任何帮助。以下是我的代码:public class KerberosTest {    public Subject loginImpl(byte[] kerberosTicket, String propertiesFileName) throws Exception {        System.setProperty("sun.security.krb5.debug", "true");//        // no effect // System.setProperty("javax.security.auth.useSubjectCredsOnly","false");        final Krb5LoginModule krb5LoginModule = new Krb5LoginModule();        Subject serviceUserSubject = new Subject();        final Map<String,String> optionMap = new HashMap<String,String>();        HashMap<String, String> shared = new HashMap<>();            optionMap.put("keyTab", "C:\\kerberos_files\\sapuser.keytab");            optionMap.put("principal", "HTTP/SAPTEST@EQSECTEST.LOCAL"); // default realm//            optionMap.put("principal", "kerberosuser"); // default realm            optionMap.put("useFirstPass", "true");            optionMap.put("doNotPrompt", "true");            optionMap.put("refreshKrb5Config", "true");            optionMap.put("useTicketCache", "false");            optionMap.put("renewTGT", "false");            optionMap.put("useKeyTab", "true");            optionMap.put("storeKey", "true");            optionMap.put("isInitiator", "true");            optionMap.put("useSubjectCredsOnly", "false");            optionMap.put("debug", "true"); // switch on debug of the Java implementation            krb5LoginModule.initialize(serviceUserSubject, null, shared, optionMap);            // login using details mentioned inside keytab            boolean loginOk = krb5LoginModule.login();            System.out.println("Login success: " + loginOk);            // This API adds Kerberos Credentials to the the Subject's private credentials set            boolean commitOk = krb5LoginModule.commit();        }    }
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

我想出了一个重要的点,我没有在任何地方找到记录。-

在 AD 中配置 kerberos 服务用户时,“信任此用户进行委派(仅限 Kerberos)”将仅对保存此更改后创建的新 TGT 生效。

例如,如果用户在客户端计算机 A 上登录,比如上午 10:00。
管理员在上午 10:30 启用对 kerberos 服务用户的委派。
当用户从机器 A 上的浏览器点击应用程序 URL 时,委托将不起作用,因为他的 TGT 是在委托打开之前(上午 10:00)创建的。

如果用户从机器 A 注销并重新登录,将生成一个新的 TGT。委派现在非常适合该用户。


查看完整回答
反对 回复 2022-12-15
  • 1 回答
  • 0 关注
  • 61 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信