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

我正在做 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();


        }


    }


哈士奇WWW
浏览 62回答 1
1回答

子衿沉夜

我想出了一个重要的点,我没有在任何地方找到记录。-在 AD 中配置 kerberos 服务用户时,“信任此用户进行委派(仅限 Kerberos)”将仅对保存此更改后创建的新 TGT 生效。例如,如果用户在客户端计算机 A 上登录,比如上午 10:00。管理员在上午 10:30 启用对 kerberos 服务用户的委派。当用户从机器 A 上的浏览器点击应用程序 URL 时,委托将不起作用,因为他的 TGT 是在委托打开之前(上午 10:00)创建的。如果用户从机器 A 注销并重新登录,将生成一个新的 TGT。委派现在非常适合该用户。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java