Hello all,

I've come across a conversation between Colm and Zheng on this mailing list 
from June and July 2016 titled "JWT pre-authentication - get JWT token on 
service side"  that touches upon the subject of extracting the token from the 
sgt client side and sending it to the service.

The final suggestion was to use:


    @Test
    @org.junit.Ignore
    public void testKerbyClientAndGssService() throws Exception {
        KrbClient client = getKrbClient();
        client.init();

        try {
            // Get a service ticket using Kerby APIs
            TgtTicket tgt = client.requestTgt(getClientPrincipal(), 
getClientPassword());
            Assert.assertTrue(tgt != null);

            SgtTicket tkt = client.requestSgt(tgt, getServerPrincipal());
            Assert.assertTrue(tkt != null);

            Credential credential = new Credential(tkt, 
tgt.getClientPrincipal());
            CredentialCache cCache = new CredentialCache();
            cCache.addCredential(credential);
            cCache.setPrimaryPrincipal(tgt.getClientPrincipal());

            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            CredCacheOutputStream os = new CredCacheOutputStream(bout);
            cCache.store(bout);
            os.close();

            // Now validate the ticket using GSS
            validateServiceTicket(bout.toByteArray());
        } catch (Exception e) {
            e.printStackTrace();
            Assert.fail();
        }
    }



But this does not seem to work on my system. I get same error Colm mentions:

GSSException: Defective token detected (Mechanism level: GSSHeader did not find 
the right tag)

The same issue appears when I obtain it directly from

sgt.getTicket().encode()

Has there been an improvement in this regard? Is there any direct and simple 
way to obtain the ticket client side using only Kerby API? If not, what is the 
recommended approach at this time?

Btw. I encode the bytes using:

new String(Base64.getEncoder().encode(bout.toByteArray()),
                StandardCharsets.UTF_8).replaceAll("\n", "");

and add them to the header under

Authorization: Negotiate + token

Cheers,

Kamil Krynicki

Reply via email to