public static void main(String[] args) throws Exception { Oid mech; if (args[0].equals("spnego")) { mech = GSSUtil.GSS_SPNEGO_MECH_OID; } else if (args[0].contains("krb5")) { mech = GSSUtil.GSS_KRB5_MECH_OID; } else { throw new Exception("Unknown mech"); } OneKDC kdc = new OneKDC(null); kdc.writeJAASConf(); kdc.setOption(KDC.Option.PREAUTH_REQUIRED, false); Map<String, List<String>> map = new HashMap<>(); map.put( OneKDC.SERVER + "@" + OneKDC.REALM, Arrays.asList(new String[] {OneKDC.BACKEND + "@" + OneKDC.REALM})); kdc.setOption(KDC.Option.ALLOW_S4U2PROXY, map); Context c, s, b; c = Context.fromJAAS("client"); s = Context.fromJAAS("server"); b = Context.fromJAAS("backend"); c.startAsClient(OneKDC.SERVER, mech); s.startAsServer(null, mech, false); Context.handshake(c, s); Context p = s.delegated(); p.startAsClient(OneKDC.BACKEND, mech); b.startAsServer(mech); Context.handshake(p, b); p.startAsClient(OneKDC.BACKEND, mech); b.startAsServer(mech); Context.handshake(p, b); }