1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.wss4j.common.spnego;
21
22 import org.ietf.jgss.GSSContext;
23 import org.ietf.jgss.GSSException;
24 import org.ietf.jgss.GSSManager;
25 import org.ietf.jgss.GSSName;
26 import org.ietf.jgss.Oid;
27
28
29
30
31
32 public class DefaultSpnegoServiceAction implements SpnegoServiceAction {
33 private static final org.slf4j.Logger LOG =
34 org.slf4j.LoggerFactory.getLogger(DefaultSpnegoServiceAction.class);
35
36 private byte[] ticket;
37 private String serviceName;
38 private boolean isUsernameServiceNameForm;
39 private GSSContext secContext;
40
41
42
43
44 public void setTicket(byte[] ticket) {
45 this.ticket = ticket;
46 }
47
48
49
50
51 public void setServiceName(String serviceName) {
52 this.serviceName = serviceName;
53 }
54
55
56
57
58 public byte[] run() {
59 try {
60 GSSManager gssManager = GSSManager.getInstance();
61 Oid oid = new Oid("1.3.6.1.5.5.2");
62
63 GSSName gssService =
64 gssManager.createName(serviceName, isUsernameServiceNameForm ? GSSName.NT_USER_NAME
65 : GSSName.NT_HOSTBASED_SERVICE);
66 secContext = gssManager.createContext(gssService, oid, null, GSSContext.DEFAULT_LIFETIME);
67
68 return secContext.acceptSecContext(ticket, 0, ticket.length);
69 } catch (GSSException e) {
70 LOG.debug("Error in obtaining a Kerberos token", e);
71 }
72
73 return new byte[0];
74 }
75
76
77
78
79 public GSSContext getContext() {
80 return secContext;
81 }
82
83 @Override
84 public void setUsernameServiceNameForm(boolean isUsernameServiceNameForm) {
85 this.isUsernameServiceNameForm = isUsernameServiceNameForm;
86 }
87
88 }