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

公開メンバ関数

 KerberosUsernamePasswordAuthenticator (CommonKerberosConfig config)
 
boolean isUserAvailable (String username)
 
boolean validUser (String username, String password)
 
Subject authenticateSubject (String username, String password) throws LoginException
 
void logoutSubject ()
 

限定公開メンバ関数

void checkKerberosServerAvailable (LoginException le)
 
String getKerberosPrincipal (String username) throws LoginException
 
CallbackHandler createJaasCallbackHandler (final String principal, final String password)
 
Configuration createJaasConfiguration ()
 

限定公開変数類

final CommonKerberosConfig config
 

非公開変数類

LoginContext loginContext
 

静的非公開変数類

static final Logger logger = Logger.getLogger(KerberosUsernamePasswordAuthenticator.class)
 

詳解

著者
Marek Posolda

構築子と解体子

◆ KerberosUsernamePasswordAuthenticator()

org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.KerberosUsernamePasswordAuthenticator ( CommonKerberosConfig  config)
inline
46  {
47  this.config = config;
48  }
final CommonKerberosConfig config
Definition: KerberosUsernamePasswordAuthenticator.java:43

関数詳解

◆ authenticateSubject()

Subject org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.authenticateSubject ( String  username,
String  password 
) throws LoginException
inline

Returns true if user was successfully authenticated against Kerberos

引数
usernameusername without Kerberos realm attached
passwordkerberos password
戻り値
true if user was successfully authenticated
120  {
121  String principal = getKerberosPrincipal(username);
122 
123  logger.debug("Validating password of principal: " + principal);
124  loginContext = new LoginContext("does-not-matter", null,
125  createJaasCallbackHandler(principal, password),
127 
128  loginContext.login();
129  logger.debug("Principal " + principal + " authenticated succesfully");
130  return loginContext.getSubject();
131  }
LoginContext loginContext
Definition: KerberosUsernamePasswordAuthenticator.java:44
String getKerberosPrincipal(String username)
Definition: KerberosUsernamePasswordAuthenticator.java:145
static final Logger logger
Definition: KerberosUsernamePasswordAuthenticator.java:41
CallbackHandler createJaasCallbackHandler(final String principal, final String password)
Definition: KerberosUsernamePasswordAuthenticator.java:162
Configuration createJaasConfiguration()
Definition: KerberosUsernamePasswordAuthenticator.java:183

◆ checkKerberosServerAvailable()

void org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.checkKerberosServerAvailable ( LoginException  le)
inlineprotected
101  {
102  String message = le.getMessage().toUpperCase();
103  if (message.contains("PORT UNREACHABLE") ||
104  message.contains("CANNOT LOCATE") ||
105  message.contains("CANNOT CONTACT") ||
106  message.contains("CANNOT FIND") ||
107  message.contains("UNKNOWN ERROR")) {
108  throw new ModelException("Kerberos unreachable", le);
109  }
110  }

◆ createJaasCallbackHandler()

CallbackHandler org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.createJaasCallbackHandler ( final String  principal,
final String  password 
)
inlineprotected
162  {
163  return new CallbackHandler() {
164 
165  @Override
166  public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
167  for (Callback callback : callbacks) {
168  if (callback instanceof NameCallback) {
169  NameCallback nameCallback = (NameCallback) callback;
170  nameCallback.setName(principal);
171  } else if (callback instanceof PasswordCallback) {
172  PasswordCallback passwordCallback = (PasswordCallback) callback;
173  passwordCallback.setPassword(password.toCharArray());
174  } else {
175  throw new UnsupportedCallbackException(callback, "Unsupported callback: " + callback.getClass().getCanonicalName());
176  }
177  }
178  }
179  };
180  }

◆ createJaasConfiguration()

Configuration org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.createJaasConfiguration ( )
inlineprotected
183  {
184  return KerberosJdkProvider.getProvider().createJaasConfigurationForUsernamePasswordLogin(config.isDebug());
185  }
final CommonKerberosConfig config
Definition: KerberosUsernamePasswordAuthenticator.java:43
boolean isDebug()
Definition: CommonKerberosConfig.java:65

◆ getKerberosPrincipal()

String org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.getKerberosPrincipal ( String  username) throws LoginException
inlineprotected
145  {
146  if (username.contains("@")) {
147  String[] tokens = username.split("@");
148 
149  String kerberosRealm = tokens[1];
150  if (!kerberosRealm.toUpperCase().equals(config.getKerberosRealm())) {
151  logger.warn("Invalid kerberos realm. Expected realm: " + config.getKerberosRealm() + ", username: " + username);
152  throw new LoginException("Client not found");
153  }
154 
155  username = tokens[0];
156  }
157 
158  return username + "@" + config.getKerberosRealm();
159  }
static final Logger logger
Definition: KerberosUsernamePasswordAuthenticator.java:41
final CommonKerberosConfig config
Definition: KerberosUsernamePasswordAuthenticator.java:43
String getKerberosRealm()
Definition: CommonKerberosConfig.java:53

◆ isUserAvailable()

boolean org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.isUserAvailable ( String  username)
inline

Returns true if user with given username exists in kerberos database

引数
usernameusername without Kerberos realm attached or with correct realm attached
戻り値
true if user available
57  {
58  logger.debugf("Checking existence of user: %s", username);
59  try {
60  String principal = getKerberosPrincipal(username);
61  loginContext = new LoginContext("does-not-matter", null,
62  createJaasCallbackHandler(principal, "fake-password-which-nobody-has"),
64 
65  loginContext.login();
66 
67  throw new IllegalStateException("Didn't expect to end here");
68  } catch (LoginException le) {
69  String message = le.getMessage();
70  logger.debugf("Message from kerberos: %s", message);
71 
73 
74  // Bit cumbersome, but seems to work with tested kerberos servers
75  boolean exists = (!message.contains("Client not found"));
76  return exists;
77  }
78  }
void checkKerberosServerAvailable(LoginException le)
Definition: KerberosUsernamePasswordAuthenticator.java:101
LoginContext loginContext
Definition: KerberosUsernamePasswordAuthenticator.java:44
String getKerberosPrincipal(String username)
Definition: KerberosUsernamePasswordAuthenticator.java:145
static final Logger logger
Definition: KerberosUsernamePasswordAuthenticator.java:41
CallbackHandler createJaasCallbackHandler(final String principal, final String password)
Definition: KerberosUsernamePasswordAuthenticator.java:162
Configuration createJaasConfiguration()
Definition: KerberosUsernamePasswordAuthenticator.java:183

◆ logoutSubject()

void org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.logoutSubject ( )
inline
134  {
135  if (loginContext != null) {
136  try {
137  loginContext.logout();
138  } catch (LoginException le) {
139  logger.error("Failed to logout kerberos subject", le);
140  }
141  }
142  }
LoginContext loginContext
Definition: KerberosUsernamePasswordAuthenticator.java:44
static final Logger logger
Definition: KerberosUsernamePasswordAuthenticator.java:41

◆ validUser()

boolean org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.validUser ( String  username,
String  password 
)
inline

Returns true if user was successfully authenticated against Kerberos

引数
usernameusername without Kerberos realm attached or with correct realm attached
passwordkerberos password
戻り値
true if user was successfully authenticated
88  {
89  try {
90  authenticateSubject(username, password);
91  logoutSubject();
92  return true;
93  } catch (LoginException le) {
95 
96  logger.debug("Failed to authenticate user " + username, le);
97  return false;
98  }
99  }
void checkKerberosServerAvailable(LoginException le)
Definition: KerberosUsernamePasswordAuthenticator.java:101
static final Logger logger
Definition: KerberosUsernamePasswordAuthenticator.java:41
Subject authenticateSubject(String username, String password)
Definition: KerberosUsernamePasswordAuthenticator.java:120
void logoutSubject()
Definition: KerberosUsernamePasswordAuthenticator.java:134

メンバ詳解

◆ config

final CommonKerberosConfig org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.config
protected

◆ logger

final Logger org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.logger = Logger.getLogger(KerberosUsernamePasswordAuthenticator.class)
staticprivate

◆ loginContext

LoginContext org.keycloak.federation.kerberos.impl.KerberosUsernamePasswordAuthenticator.loginContext
private

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