1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.ws.security.message.token;
21
22 import java.security.Principal;
23 import java.security.PrivilegedAction;
24
25 import org.ietf.jgss.GSSContext;
26 import org.ietf.jgss.GSSCredential;
27 import org.ietf.jgss.GSSException;
28 import org.ietf.jgss.GSSManager;
29 import org.ietf.jgss.GSSName;
30 import org.ietf.jgss.Oid;
31
32
33
34
35
36 public class KerberosClientAction implements PrivilegedAction<byte[]> {
37 private static org.apache.commons.logging.Log log =
38 org.apache.commons.logging.LogFactory.getLog(KerberosClientAction.class);
39
40 private Principal clientPrincipal;
41 private String serviceName;
42
43 public KerberosClientAction(Principal clientPrincipal, String serviceName) {
44 this.clientPrincipal = clientPrincipal;
45 this.serviceName = serviceName;
46 }
47
48 public byte[] run() {
49 try {
50 GSSManager gssManager = GSSManager.getInstance();
51
52 Oid kerberos5Oid = new Oid("1.2.840.113554.1.2.2");
53 GSSName gssClient = gssManager.createName(clientPrincipal.getName(), GSSName.NT_USER_NAME);
54 GSSCredential credentials =
55 gssManager.createCredential(
56 gssClient, GSSCredential.DEFAULT_LIFETIME, kerberos5Oid, GSSCredential.INITIATE_ONLY
57 );
58
59 GSSName gssService = gssManager.createName(serviceName, GSSName.NT_HOSTBASED_SERVICE);
60 GSSContext secContext =
61 gssManager.createContext(
62 gssService, kerberos5Oid, credentials, GSSContext.DEFAULT_LIFETIME
63 );
64
65 secContext.requestMutualAuth(false);
66 byte[] token = new byte[0];
67 byte[] returnedToken = secContext.initSecContext(token, 0, token.length);
68 secContext.dispose();
69 return returnedToken;
70 } catch (GSSException e) {
71 if (log.isDebugEnabled()) {
72 log.debug("Error in obtaining a Kerberos token", e);
73 }
74 }
75
76 return null;
77
78 }
79
80 }