keycloak
クラス | 公開メンバ関数 | 限定公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator クラス
org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator 連携図
Collaboration graph

クラス

class  AcceptSecContext
 

公開メンバ関数

 SPNEGOAuthenticator (CommonKerberosConfig kerberosConfig, KerberosServerSubjectAuthenticator kerberosSubjectAuthenticator, String spnegoToken)
 
void authenticate ()
 
boolean isAuthenticated ()
 
String getResponseToken ()
 
String getSerializedDelegationCredential ()
 
String getAuthenticatedUsername ()
 

限定公開メンバ関数

GSSContext establishContext () throws GSSException, IOException
 
void logAuthDetails (GSSContext gssContext) throws GSSException
 

非公開変数類

final KerberosServerSubjectAuthenticator kerberosSubjectAuthenticator
 
final String spnegoToken
 
final CommonKerberosConfig kerberosConfig
 
boolean authenticated = false
 
String authenticatedKerberosPrincipal = null
 
GSSCredential delegationCredential
 
KerberosTicket kerberosTicket
 
String responseToken = null
 

静的非公開変数類

static final Logger log = Logger.getLogger(SPNEGOAuthenticator.class)
 

詳解

著者
Marek Posolda

構築子と解体子

◆ SPNEGOAuthenticator()

org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.SPNEGOAuthenticator ( CommonKerberosConfig  kerberosConfig,
KerberosServerSubjectAuthenticator  kerberosSubjectAuthenticator,
String  spnegoToken 
)
inline
55  {
58  this.spnegoToken = spnegoToken;
59  }
final CommonKerberosConfig kerberosConfig
Definition: SPNEGOAuthenticator.java:47
final KerberosServerSubjectAuthenticator kerberosSubjectAuthenticator
Definition: SPNEGOAuthenticator.java:45
final String spnegoToken
Definition: SPNEGOAuthenticator.java:46

関数詳解

◆ authenticate()

void org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.authenticate ( )
inline
61  {
62  if (log.isTraceEnabled()) {
63  log.trace("SPNEGO Login with token: " + spnegoToken);
64  }
65 
66  try {
68  authenticated = Subject.doAs(serverSubject, new AcceptSecContext());
69 
70  // kerberosTicketis available in IBM JDK in case that GSSContext supports delegated credentials
71  Set<KerberosTicket> kerberosTickets = serverSubject.getPrivateCredentials(KerberosTicket.class);
72  Iterator<KerberosTicket> iterator = kerberosTickets.iterator();
73  if (iterator.hasNext()) {
74  kerberosTicket = iterator.next();
75  }
76 
77  } catch (Exception e) {
78  log.warn("SPNEGO login failed", e);
79  } finally {
81  }
82  }
boolean authenticated
Definition: SPNEGOAuthenticator.java:49
final KerberosServerSubjectAuthenticator kerberosSubjectAuthenticator
Definition: SPNEGOAuthenticator.java:45
void logoutServerSubject()
Definition: KerberosServerSubjectAuthenticator.java:66
final String spnegoToken
Definition: SPNEGOAuthenticator.java:46
Subject authenticateServerSubject()
Definition: KerberosServerSubjectAuthenticator.java:58
KerberosTicket kerberosTicket
Definition: SPNEGOAuthenticator.java:52
static final Logger log
Definition: SPNEGOAuthenticator.java:43

◆ establishContext()

GSSContext org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.establishContext ( ) throws GSSException, IOException
inlineprotected
161  {
162  GSSManager manager = GSSManager.getInstance();
163 
164  Oid[] supportedMechs = new Oid[] { KerberosConstants.KRB5_OID, KerberosConstants.SPNEGO_OID };
165  GSSCredential gssCredential = manager.createCredential(null, GSSCredential.INDEFINITE_LIFETIME, supportedMechs, GSSCredential.ACCEPT_ONLY);
166  GSSContext gssContext = manager.createContext(gssCredential);
167 
168  byte[] inputToken = Base64.decode(spnegoToken);
169  byte[] respToken = gssContext.acceptSecContext(inputToken, 0, inputToken.length);
170  responseToken = Base64.encodeBytes(respToken);
171 
172  return gssContext;
173  }
final String spnegoToken
Definition: SPNEGOAuthenticator.java:46
String responseToken
Definition: SPNEGOAuthenticator.java:53

◆ getAuthenticatedUsername()

String org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.getAuthenticatedUsername ( )
inline
戻り値
username to be used in Keycloak. Username is authenticated kerberos principal without realm name
115  {
116  String[] tokens = authenticatedKerberosPrincipal.split("@");
117  String username = tokens[0];
118  return username;
119  }
String authenticatedKerberosPrincipal
Definition: SPNEGOAuthenticator.java:50

◆ getResponseToken()

String org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.getResponseToken ( )
inline
88  {
89  return responseToken;
90  }
String responseToken
Definition: SPNEGOAuthenticator.java:53

◆ getSerializedDelegationCredential()

String org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.getSerializedDelegationCredential ( )
inline
92  {
93  if (delegationCredential == null) {
94  if (log.isTraceEnabled()) {
95  log.trace("No delegation credential available.");
96  }
97 
98  return null;
99  }
100 
101  try {
102  if (log.isTraceEnabled()) {
103  log.trace("Serializing credential " + delegationCredential);
104  }
105  return KerberosSerializationUtils.serializeCredential(kerberosTicket, delegationCredential);
106  } catch (KerberosSerializationUtils.KerberosSerializationException kse) {
107  log.warn("Couldn't serialize credential: " + delegationCredential, kse);
108  return null;
109  }
110  }
KerberosTicket kerberosTicket
Definition: SPNEGOAuthenticator.java:52
GSSCredential delegationCredential
Definition: SPNEGOAuthenticator.java:51
static final Logger log
Definition: SPNEGOAuthenticator.java:43

◆ isAuthenticated()

boolean org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.isAuthenticated ( )
inline
84  {
85  return authenticated;
86  }
boolean authenticated
Definition: SPNEGOAuthenticator.java:49

◆ logAuthDetails()

void org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.logAuthDetails ( GSSContext  gssContext) throws GSSException
inlineprotected
176  {
177  if (log.isDebugEnabled()) {
178  String message = new StringBuilder("SPNEGO Security context accepted with token: " + responseToken)
179  .append(", established: ").append(gssContext.isEstablished())
180  .append(", credDelegState: ").append(gssContext.getCredDelegState())
181  .append(", mutualAuthState: ").append(gssContext.getMutualAuthState())
182  .append(", lifetime: ").append(gssContext.getLifetime())
183  .append(", confState: ").append(gssContext.getConfState())
184  .append(", integState: ").append(gssContext.getIntegState())
185  .append(", srcName: ").append(gssContext.getSrcName())
186  .append(", targName: ").append(gssContext.getTargName())
187  .toString();
188  log.debug(message);
189  }
190  }
String responseToken
Definition: SPNEGOAuthenticator.java:53
static final Logger log
Definition: SPNEGOAuthenticator.java:43

メンバ詳解

◆ authenticated

boolean org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.authenticated = false
private

◆ authenticatedKerberosPrincipal

String org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.authenticatedKerberosPrincipal = null
private

◆ delegationCredential

GSSCredential org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.delegationCredential
private

◆ kerberosConfig

final CommonKerberosConfig org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.kerberosConfig
private

◆ kerberosSubjectAuthenticator

final KerberosServerSubjectAuthenticator org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.kerberosSubjectAuthenticator
private

◆ kerberosTicket

KerberosTicket org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.kerberosTicket
private

◆ log

final Logger org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.log = Logger.getLogger(SPNEGOAuthenticator.class)
staticprivate

◆ responseToken

String org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.responseToken = null
private

◆ spnegoToken

final String org.keycloak.federation.kerberos.impl.SPNEGOAuthenticator.spnegoToken
private

このクラス詳解は次のファイルから抽出されました: