keycloak-federation
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.storage.ldap.LDAPStorageProvider クラス
org.keycloak.storage.ldap.LDAPStorageProvider の継承関係図
Inheritance graph
org.keycloak.storage.ldap.LDAPStorageProvider 連携図
Collaboration graph

公開メンバ関数

 LDAPStorageProvider (LDAPStorageProviderFactory factory, KeycloakSession session, ComponentModel model, LDAPIdentityStore ldapIdentityStore)
 
void setUpdater (PasswordUpdateCallback updater)
 
KeycloakSession getSession ()
 
LDAPIdentityStore getLdapIdentityStore ()
 
EditMode getEditMode ()
 
UserStorageProviderModel getModel ()
 
LDAPStorageMapperManager getMapperManager ()
 
LDAPStorageUserManager getUserManager ()
 
UserModel validate (RealmModel realm, UserModel local)
 
boolean supportsCredentialAuthenticationFor (String type)
 
List< UserModel > searchForUserByUserAttribute (String attrName, String attrValue, RealmModel realm)
 
boolean synchronizeRegistrations ()
 
UserModel addUser (RealmModel realm, String username)
 
boolean removeUser (RealmModel realm, UserModel user)
 
UserModel getUserById (String id, RealmModel realm)
 
int getUsersCount (RealmModel realm)
 
List< UserModel > getUsers (RealmModel realm)
 
List< UserModel > getUsers (RealmModel realm, int firstResult, int maxResults)
 
List< UserModel > searchForUser (String search, RealmModel realm)
 
List< UserModel > searchForUser (String search, RealmModel realm, int firstResult, int maxResults)
 
List< UserModel > searchForUser (Map< String, String > params, RealmModel realm)
 
List< UserModel > searchForUser (Map< String, String > params, RealmModel realm, int firstResult, int maxResults)
 
List< UserModel > getGroupMembers (RealmModel realm, GroupModel group)
 
List< UserModel > getGroupMembers (RealmModel realm, GroupModel group, int firstResult, int maxResults)
 
List< UserModel > loadUsersByUsernames (List< String > usernames, RealmModel realm)
 
UserModel getUserByUsername (String username, RealmModel realm)
 
UserModel getUserByEmail (String email, RealmModel realm)
 
void preRemove (RealmModel realm)
 
void preRemove (RealmModel realm, RoleModel role)
 
void preRemove (RealmModel realm, GroupModel group)
 
boolean validPassword (RealmModel realm, UserModel user, String password)
 
boolean updateCredential (RealmModel realm, UserModel user, CredentialInput input)
 
void disableCredentialType (RealmModel realm, UserModel user, String credentialType)
 
Set< String > getDisableableCredentialTypes (RealmModel realm, UserModel user)
 
Set< String > getSupportedCredentialTypes ()
 
boolean supportsCredentialType (String credentialType)
 
boolean isConfiguredFor (RealmModel realm, UserModel user, String credentialType)
 
boolean isValid (RealmModel realm, UserModel user, CredentialInput input)
 
CredentialValidationOutput authenticate (RealmModel realm, CredentialInput cred)
 
void close ()
 
LDAPObject loadLDAPUserByUsername (RealmModel realm, String username)
 

限定公開メンバ関数

UserModel proxy (RealmModel realm, UserModel local, LDAPObject ldapObject)
 
List< LDAPObjectsearchLDAP (RealmModel realm, Map< String, String > attributes, int maxResults)
 
LDAPObject loadAndValidateUser (RealmModel realm, UserModel local)
 
UserModel importUserFromLDAP (KeycloakSession session, RealmModel realm, LDAPObject ldapUser)
 
LDAPObject queryByEmail (RealmModel realm, String email)
 
UserModel findOrCreateAuthenticatedUser (RealmModel realm, String username)
 

限定公開変数類

LDAPStorageProviderFactory factory
 
KeycloakSession session
 
UserStorageProviderModel model
 
LDAPIdentityStore ldapIdentityStore
 
EditMode editMode
 
LDAPProviderKerberosConfig kerberosConfig
 
PasswordUpdateCallback updater
 
LDAPStorageMapperManager mapperManager
 
LDAPStorageUserManager userManager
 
final Set< String > supportedCredentialTypes = new HashSet<>()
 

非公開メンバ関数

void checkDNChanged (RealmModel realm, UserModel local, LDAPObject ldapObject)
 

静的非公開変数類

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

詳解

著者
Marek Posolda
Bill Burke
バージョン
Revision
1

構築子と解体子

◆ LDAPStorageProvider()

org.keycloak.storage.ldap.LDAPStorageProvider.LDAPStorageProvider ( LDAPStorageProviderFactory  factory,
KeycloakSession  session,
ComponentModel  model,
LDAPIdentityStore  ldapIdentityStore 
)
inline
102  {
103  this.factory = factory;
104  this.session = session;
105  this.model = new UserStorageProviderModel(model);
107  this.kerberosConfig = new LDAPProviderKerberosConfig(model);
109  this.mapperManager = new LDAPStorageMapperManager(this);
110  this.userManager = new LDAPStorageUserManager(this);
111 
112  supportedCredentialTypes.add(UserCredentialModel.PASSWORD);
114  supportedCredentialTypes.add(UserCredentialModel.KERBEROS);
115  }
116  }
LDAPStorageProviderFactory factory
Definition: LDAPStorageProvider.java:86
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
EditMode editMode
Definition: LDAPStorageProvider.java:90
UserStorageProvider.EditMode getEditMode()
Definition: LDAPConfig.java:222
boolean isAllowKerberosAuthentication()
Definition: CommonKerberosConfig.java:49
final Set< String > supportedCredentialTypes
Definition: LDAPStorageProvider.java:100
KeycloakSession session
Definition: LDAPStorageProvider.java:87
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPProviderKerberosConfig kerberosConfig
Definition: LDAPStorageProvider.java:91
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

関数詳解

◆ addUser()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.addUser ( RealmModel  realm,
String  username 
)
inline
246  {
247  if (!synchronizeRegistrations()) {
248  return null;
249  }
250  UserModel user = null;
251  if (model.isImportEnabled()) {
252  user = session.userLocalStorage().addUser(realm, username);
253  user.setFederationLink(model.getId());
254  } else {
255  user = new InMemoryUserAdapter(session, realm, new StorageId(model.getId(), username).getId());
256  user.setUsername(username);
257  }
258  LDAPObject ldapUser = LDAPUtils.addUserToLDAP(this, realm, user);
259  LDAPUtils.checkUuid(ldapUser, ldapIdentityStore.getConfig());
260  user.setSingleAttribute(LDAPConstants.LDAP_ID, ldapUser.getUuid());
261  user.setSingleAttribute(LDAPConstants.LDAP_ENTRY_DN, ldapUser.getDn().toString());
262 
263  // Add the user to the default groups and add default required actions
264  UserModel proxy = proxy(realm, user, ldapUser);
265  DefaultRoles.addDefaultRoles(realm, proxy);
266 
267  for (GroupModel g : realm.getDefaultGroups()) {
268  proxy.joinGroup(g);
269  }
270  for (RequiredActionProviderModel r : realm.getRequiredActionProviders()) {
271  if (r.isEnabled() && r.isDefaultAction()) {
272  proxy.addRequiredAction(r.getAlias());
273  }
274  }
275 
276  return proxy;
277  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
KeycloakSession session
Definition: LDAPStorageProvider.java:87
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
boolean synchronizeRegistrations()
Definition: LDAPStorageProvider.java:241
UserModel proxy(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:157
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ authenticate()

CredentialValidationOutput org.keycloak.storage.ldap.LDAPStorageProvider.authenticate ( RealmModel  realm,
CredentialInput  cred 
)
inline
673  {
674  if (!(cred instanceof UserCredentialModel)) CredentialValidationOutput.failed();
675  UserCredentialModel credential = (UserCredentialModel)cred;
676  if (credential.getType().equals(UserCredentialModel.KERBEROS)) {
678  String spnegoToken = credential.getValue();
679  SPNEGOAuthenticator spnegoAuthenticator = factory.createSPNEGOAuthenticator(spnegoToken, kerberosConfig);
680 
681  spnegoAuthenticator.authenticate();
682 
683  Map<String, String> state = new HashMap<String, String>();
684  if (spnegoAuthenticator.isAuthenticated()) {
685 
686  // TODO: This assumes that LDAP "uid" is equal to kerberos principal name. Like uid "hnelson" and kerberos principal "hnelson@KEYCLOAK.ORG".
687  // Check if it's correct or if LDAP attribute for mapping kerberos principal should be available (For ApacheDS it seems to be attribute "krb5PrincipalName" but on MSAD it's likely different)
688  String username = spnegoAuthenticator.getAuthenticatedUsername();
689  UserModel user = findOrCreateAuthenticatedUser(realm, username);
690 
691  if (user == null) {
692  logger.warnf("Kerberos/SPNEGO authentication succeeded with username [%s], but couldn't find or create user with federation provider [%s]", username, model.getName());
693  return CredentialValidationOutput.failed();
694  } else {
695  String delegationCredential = spnegoAuthenticator.getSerializedDelegationCredential();
696  if (delegationCredential != null) {
697  state.put(KerberosConstants.GSS_DELEGATION_CREDENTIAL, delegationCredential);
698  }
699 
700  return new CredentialValidationOutput(user, CredentialValidationOutput.Status.AUTHENTICATED, state);
701  }
702  } else {
703  state.put(KerberosConstants.RESPONSE_TOKEN, spnegoAuthenticator.getResponseToken());
704  return new CredentialValidationOutput(null, CredentialValidationOutput.Status.CONTINUE, state);
705  }
706  }
707  }
708 
709  return CredentialValidationOutput.failed();
710  }
LDAPStorageProviderFactory factory
Definition: LDAPStorageProvider.java:86
static final Logger logger
Definition: LDAPStorageProvider.java:84
boolean isAllowKerberosAuthentication()
Definition: CommonKerberosConfig.java:49
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPProviderKerberosConfig kerberosConfig
Definition: LDAPStorageProvider.java:91
SPNEGOAuthenticator createSPNEGOAuthenticator(String spnegoToken, CommonKerberosConfig kerberosConfig)
Definition: LDAPStorageProviderFactory.java:616
UserModel findOrCreateAuthenticatedUser(RealmModel realm, String username)
Definition: LDAPStorageProvider.java:723
void authenticate()
Definition: SPNEGOAuthenticator.java:61

◆ checkDNChanged()

void org.keycloak.storage.ldap.LDAPStorageProvider.checkDNChanged ( RealmModel  realm,
UserModel  local,
LDAPObject  ldapObject 
)
inlineprivate
194  {
195  String dnFromDB = local.getFirstAttribute(LDAPConstants.LDAP_ENTRY_DN);
196  String ldapDn = ldapObject.getDn().toString();
197  if (!ldapDn.equals(dnFromDB)) {
198  logger.debugf("Updated LDAP DN of user '%s' to '%s'", local.getUsername(), ldapDn);
199  local.setSingleAttribute(LDAPConstants.LDAP_ENTRY_DN, ldapDn);
200 
201  UserCache userCache = session.userCache();
202  if (userCache != null) {
203  userCache.evict(realm, local);
204  }
205  }
206  }
static final Logger logger
Definition: LDAPStorageProvider.java:84
KeycloakSession session
Definition: LDAPStorageProvider.java:87

◆ close()

void org.keycloak.storage.ldap.LDAPStorageProvider.close ( )
inline
713  {
714  }

◆ disableCredentialType()

void org.keycloak.storage.ldap.LDAPStorageProvider.disableCredentialType ( RealmModel  realm,
UserModel  user,
String  credentialType 
)
inline
638  {
639 
640  }

◆ findOrCreateAuthenticatedUser()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.findOrCreateAuthenticatedUser ( RealmModel  realm,
String  username 
)
inlineprotected

Called after successful kerberos authentication

引数
realmrealm
usernameusername without realm prefix
戻り値
finded or newly created user
723  {
724  UserModel user = session.userLocalStorage().getUserByUsername(username, realm);
725  if (user != null) {
726  logger.debugf("Kerberos authenticated user [%s] found in Keycloak storage", username);
727  if (!model.getId().equals(user.getFederationLink())) {
728  logger.warnf("User with username [%s] already exists, but is not linked to provider [%s]", username, model.getName());
729  return null;
730  } else {
731  LDAPObject ldapObject = loadAndValidateUser(realm, user);
732  if (ldapObject != null) {
733  return proxy(realm, user, ldapObject);
734  } else {
735  logger.warnf("User with username [%s] aready exists and is linked to provider [%s] but is not valid. Stale LDAP_ID on local user is: %s",
736  username, model.getName(), user.getFirstAttribute(LDAPConstants.LDAP_ID));
737  logger.warn("Will re-create user");
738  UserCache userCache = session.userCache();
739  if (userCache != null) {
740  userCache.evict(realm, user);
741  }
742  new UserManager(session).removeUser(realm, user, session.userLocalStorage());
743  }
744  }
745  }
746 
747  // Creating user to local storage
748  logger.debugf("Kerberos authenticated user [%s] not in Keycloak storage. Creating him", username);
749  return getUserByUsername(username, realm);
750  }
UserModel getUserByUsername(String username, RealmModel realm)
Definition: LDAPStorageProvider.java:476
static final Logger logger
Definition: LDAPStorageProvider.java:84
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
KeycloakSession session
Definition: LDAPStorageProvider.java:87
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
UserModel proxy(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:157

◆ getDisableableCredentialTypes()

Set<String> org.keycloak.storage.ldap.LDAPStorageProvider.getDisableableCredentialTypes ( RealmModel  realm,
UserModel  user 
)
inline
643  {
644  return Collections.EMPTY_SET;
645  }

◆ getEditMode()

EditMode org.keycloak.storage.ldap.LDAPStorageProvider.getEditMode ( )
inline
130  {
131  return editMode;
132  }
EditMode editMode
Definition: LDAPStorageProvider.java:90

◆ getGroupMembers() [1/2]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.getGroupMembers ( RealmModel  realm,
GroupModel  group 
)
inline
370  {
371  return getGroupMembers(realm, group, 0, Integer.MAX_VALUE - 1);
372  }
List< UserModel > getGroupMembers(RealmModel realm, GroupModel group)
Definition: LDAPStorageProvider.java:370

◆ getGroupMembers() [2/2]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.getGroupMembers ( RealmModel  realm,
GroupModel  group,
int  firstResult,
int  maxResults 
)
inline
375  {
376  List<ComponentModel> mappers = realm.getComponents(model.getId(), LDAPStorageMapper.class.getName());
377  List<ComponentModel> sortedMappers = mapperManager.sortMappersAsc(mappers);
378  for (ComponentModel mapperModel : sortedMappers) {
379  LDAPStorageMapper ldapMapper = mapperManager.getMapper(mapperModel);
380  List<UserModel> users = ldapMapper.getGroupMembers(realm, group, firstResult, maxResults);
381 
382  // Sufficient for now
383  if (users.size() > 0) {
384  return users;
385  }
386  }
387  return Collections.emptyList();
388  }
List< ComponentModel > sortMappersAsc(Collection< ComponentModel > mappers)
Definition: LDAPStorageMapperManager.java:50
LDAPStorageMapper getMapper(ComponentModel mapperModel)
Definition: LDAPStorageMapperManager.java:40
List< UserModel > getGroupMembers(RealmModel realm, GroupModel group, int firstResult, int maxResults)
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93

◆ getLdapIdentityStore()

LDAPIdentityStore org.keycloak.storage.ldap.LDAPStorageProvider.getLdapIdentityStore ( )
inline
126  {
127  return this.ldapIdentityStore;
128  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89

◆ getMapperManager()

LDAPStorageMapperManager org.keycloak.storage.ldap.LDAPStorageProvider.getMapperManager ( )
inline
138  {
139  return mapperManager;
140  }
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93

◆ getModel()

UserStorageProviderModel org.keycloak.storage.ldap.LDAPStorageProvider.getModel ( )
inline
134  {
135  return model;
136  }
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88

◆ getSession()

KeycloakSession org.keycloak.storage.ldap.LDAPStorageProvider.getSession ( )
inline
122  {
123  return session;
124  }
KeycloakSession session
Definition: LDAPStorageProvider.java:87

◆ getSupportedCredentialTypes()

Set<String> org.keycloak.storage.ldap.LDAPStorageProvider.getSupportedCredentialTypes ( )
inline
647  {
648  return new HashSet<String>(this.supportedCredentialTypes);
649  }
final Set< String > supportedCredentialTypes
Definition: LDAPStorageProvider.java:100

◆ getUserByEmail()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.getUserByEmail ( String  email,
RealmModel  realm 
)
inline
534  {
535  LDAPObject ldapUser = queryByEmail(realm, email);
536  if (ldapUser == null) {
537  return null;
538  }
539 
540  // Check here if user already exists
541  String ldapUsername = LDAPUtils.getUsername(ldapUser, ldapIdentityStore.getConfig());
542  UserModel user = session.userLocalStorage().getUserByUsername(ldapUsername, realm);
543 
544  if (user != null) {
545  LDAPUtils.checkUuid(ldapUser, ldapIdentityStore.getConfig());
546  // If email attribute mapper is set to "Always Read Value From LDAP" the user may be in Keycloak DB with an old email address
547  if (ldapUser.getUuid().equals(user.getFirstAttribute(LDAPConstants.LDAP_ID))) return user;
548  throw new ModelDuplicateException("User with username '" + ldapUsername + "' already exists in Keycloak. It conflicts with LDAP user with email '" + email + "'");
549  }
550 
551  return importUserFromLDAP(session, realm, ldapUser);
552  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
UserModel importUserFromLDAP(KeycloakSession session, RealmModel realm, LDAPObject ldapUser)
Definition: LDAPStorageProvider.java:485
LDAPObject queryByEmail(RealmModel realm, String email)
Definition: LDAPStorageProvider.java:521
KeycloakSession session
Definition: LDAPStorageProvider.java:87
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ getUserById()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.getUserById ( String  id,
RealmModel  realm 
)
inline
299  {
300  UserModel alreadyLoadedInSession = userManager.getManagedProxiedUser(id);
301  if (alreadyLoadedInSession != null) return alreadyLoadedInSession;
302 
303  StorageId storageId = new StorageId(id);
304  return getUserByUsername(storageId.getExternalId(), realm);
305  }
UserModel getUserByUsername(String username, RealmModel realm)
Definition: LDAPStorageProvider.java:476
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94
UserModel getManagedProxiedUser(String userId)
Definition: LDAPStorageUserManager.java:41

◆ getUserByUsername()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.getUserByUsername ( String  username,
RealmModel  realm 
)
inline
476  {
477  LDAPObject ldapUser = loadLDAPUserByUsername(realm, username);
478  if (ldapUser == null) {
479  return null;
480  }
481 
482  return importUserFromLDAP(session, realm, ldapUser);
483  }
UserModel importUserFromLDAP(KeycloakSession session, RealmModel realm, LDAPObject ldapUser)
Definition: LDAPStorageProvider.java:485
LDAPObject loadLDAPUserByUsername(RealmModel realm, String username)
Definition: LDAPStorageProvider.java:752
KeycloakSession session
Definition: LDAPStorageProvider.java:87

◆ getUserManager()

LDAPStorageUserManager org.keycloak.storage.ldap.LDAPStorageProvider.getUserManager ( )
inline
142  {
143  return userManager;
144  }
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94

◆ getUsers() [1/2]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.getUsers ( RealmModel  realm)
inline
313  {
314  return Collections.EMPTY_LIST;
315  }

◆ getUsers() [2/2]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.getUsers ( RealmModel  realm,
int  firstResult,
int  maxResults 
)
inline
318  {
319  return Collections.EMPTY_LIST;
320  }

◆ getUsersCount()

int org.keycloak.storage.ldap.LDAPStorageProvider.getUsersCount ( RealmModel  realm)
inline
308  {
309  return 0;
310  }

◆ importUserFromLDAP()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.importUserFromLDAP ( KeycloakSession  session,
RealmModel  realm,
LDAPObject  ldapUser 
)
inlineprotected
485  {
486  String ldapUsername = LDAPUtils.getUsername(ldapUser, ldapIdentityStore.getConfig());
487  LDAPUtils.checkUuid(ldapUser, ldapIdentityStore.getConfig());
488 
489  UserModel imported = null;
490  if (model.isImportEnabled()) {
491  imported = session.userLocalStorage().addUser(realm, ldapUsername);
492  } else {
493  InMemoryUserAdapter adapter = new InMemoryUserAdapter(session, realm, new StorageId(model.getId(), ldapUsername).getId());
494  adapter.addDefaults();
495  imported = adapter;
496  }
497  imported.setEnabled(true);
498 
499  List<ComponentModel> mappers = realm.getComponents(model.getId(), LDAPStorageMapper.class.getName());
500  List<ComponentModel> sortedMappers = mapperManager.sortMappersDesc(mappers);
501  for (ComponentModel mapperModel : sortedMappers) {
502  if (logger.isTraceEnabled()) {
503  logger.tracef("Using mapper %s during import user from LDAP", mapperModel);
504  }
505  LDAPStorageMapper ldapMapper = mapperManager.getMapper(mapperModel);
506  ldapMapper.onImportUserFromLDAP(ldapUser, imported, realm, true);
507  }
508 
509  String userDN = ldapUser.getDn().toString();
510  if (model.isImportEnabled()) imported.setFederationLink(model.getId());
511  imported.setSingleAttribute(LDAPConstants.LDAP_ID, ldapUser.getUuid());
512  imported.setSingleAttribute(LDAPConstants.LDAP_ENTRY_DN, userDN);
513 
514 
515  logger.debugf("Imported new user from LDAP to Keycloak DB. Username: [%s], Email: [%s], LDAP_ID: [%s], LDAP Entry DN: [%s]", imported.getUsername(), imported.getEmail(),
516  ldapUser.getUuid(), userDN);
517  UserModel proxy = proxy(realm, imported, ldapUser);
518  return proxy;
519  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
LDAPStorageMapper getMapper(ComponentModel mapperModel)
Definition: LDAPStorageMapperManager.java:40
void onImportUserFromLDAP(LDAPObject ldapUser, UserModel user, RealmModel realm, boolean isCreate)
static final Logger logger
Definition: LDAPStorageProvider.java:84
KeycloakSession session
Definition: LDAPStorageProvider.java:87
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
List< ComponentModel > sortMappersDesc(Collection< ComponentModel > mappers)
Definition: LDAPStorageMapperManager.java:54
UserModel proxy(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:157
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ isConfiguredFor()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.isConfiguredFor ( RealmModel  realm,
UserModel  user,
String  credentialType 
)
inline
658  {
659  return getSupportedCredentialTypes().contains(credentialType);
660  }
Set< String > getSupportedCredentialTypes()
Definition: LDAPStorageProvider.java:647

◆ isValid()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.isValid ( RealmModel  realm,
UserModel  user,
CredentialInput  input 
)
inline
663  {
664  if (!(input instanceof UserCredentialModel)) return false;
665  if (input.getType().equals(UserCredentialModel.PASSWORD) && !session.userCredentialManager().isConfiguredLocally(realm, user, UserCredentialModel.PASSWORD)) {
666  return validPassword(realm, user, ((UserCredentialModel)input).getValue());
667  } else {
668  return false; // invalid cred type
669  }
670  }
boolean validPassword(RealmModel realm, UserModel user, String password)
Definition: LDAPStorageProvider.java:569
KeycloakSession session
Definition: LDAPStorageProvider.java:87

◆ loadAndValidateUser()

LDAPObject org.keycloak.storage.ldap.LDAPStorageProvider.loadAndValidateUser ( RealmModel  realm,
UserModel  local 
)
inlineprotected
引数
local
戻り値
ldapUser corresponding to local user or null if user is no longer in LDAP
455  {
456  LDAPObject existing = userManager.getManagedLDAPUser(local.getId());
457  if (existing != null) {
458  return existing;
459  }
460 
461  LDAPObject ldapUser = loadLDAPUserByUsername(realm, local.getUsername());
462  if (ldapUser == null) {
463  return null;
464  }
465  LDAPUtils.checkUuid(ldapUser, ldapIdentityStore.getConfig());
466 
467  if (ldapUser.getUuid().equals(local.getFirstAttribute(LDAPConstants.LDAP_ID))) {
468  return ldapUser;
469  } else {
470  logger.warnf("LDAP User invalid. ID doesn't match. ID from LDAP [%s], LDAP ID from local DB: [%s]", ldapUser.getUuid(), local.getFirstAttribute(LDAPConstants.LDAP_ID));
471  return null;
472  }
473  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
LDAPObject loadLDAPUserByUsername(RealmModel realm, String username)
Definition: LDAPStorageProvider.java:752
static final Logger logger
Definition: LDAPStorageProvider.java:84
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94
LDAPObject getManagedLDAPUser(String userId)
Definition: LDAPStorageUserManager.java:46
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ loadLDAPUserByUsername()

LDAPObject org.keycloak.storage.ldap.LDAPStorageProvider.loadLDAPUserByUsername ( RealmModel  realm,
String  username 
)
inline
752  {
753  LDAPQuery ldapQuery = LDAPUtils.createQueryForUserSearch(this, realm);
754  LDAPQueryConditionsBuilder conditionsBuilder = new LDAPQueryConditionsBuilder();
755 
756  String usernameMappedAttribute = this.ldapIdentityStore.getConfig().getUsernameLdapAttribute();
757  Condition usernameCondition = conditionsBuilder.equal(usernameMappedAttribute, username, EscapeStrategy.DEFAULT);
758  ldapQuery.addWhereCondition(usernameCondition);
759 
760  LDAPObject ldapUser = ldapQuery.getFirstResult();
761  if (ldapUser == null) {
762  return null;
763  }
764 
765  return ldapUser;
766  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
String getUsernameLdapAttribute()
Definition: LDAPConfig.java:188
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ loadUsersByUsernames()

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.loadUsersByUsernames ( List< String >  usernames,
RealmModel  realm 
)
inline
390  {
391  List<UserModel> result = new ArrayList<>();
392  for (String username : usernames) {
393  UserModel kcUser = session.users().getUserByUsername(username, realm);
394  if (kcUser == null) {
395  logger.warnf("User '%s' referenced by membership wasn't found in LDAP", username);
396  } else if (model.isImportEnabled() && !model.getId().equals(kcUser.getFederationLink())) {
397  logger.warnf("Incorrect federation provider of user '%s'", kcUser.getUsername());
398  } else {
399  result.add(kcUser);
400  }
401  }
402  return result;
403  }
static final Logger logger
Definition: LDAPStorageProvider.java:84
KeycloakSession session
Definition: LDAPStorageProvider.java:87
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88

◆ preRemove() [1/3]

void org.keycloak.storage.ldap.LDAPStorageProvider.preRemove ( RealmModel  realm)
inline
555  {
556  // complete Don't think we have to do anything
557  }

◆ preRemove() [2/3]

void org.keycloak.storage.ldap.LDAPStorageProvider.preRemove ( RealmModel  realm,
RoleModel  role 
)
inline
560  {
561  // TODO: Maybe mappers callback to ensure role deletion propagated to LDAP by RoleLDAPFederationMapper?
562  }

◆ preRemove() [3/3]

void org.keycloak.storage.ldap.LDAPStorageProvider.preRemove ( RealmModel  realm,
GroupModel  group 
)
inline
565  {
566 
567  }

◆ proxy()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.proxy ( RealmModel  realm,
UserModel  local,
LDAPObject  ldapObject 
)
inlineprotected
157  {
158  UserModel existing = userManager.getManagedProxiedUser(local.getId());
159  if (existing != null) {
160  return existing;
161  }
162 
163  UserModel proxied = local;
164 
165  checkDNChanged(realm, local, ldapObject);
166 
167  switch (editMode) {
168  case READ_ONLY:
169  if (model.isImportEnabled()) {
170  proxied = new ReadonlyLDAPUserModelDelegate(local, this);
171  } else {
172  proxied = new ReadOnlyUserModelDelegate(local);
173  }
174  break;
175  case WRITABLE:
176  proxied = new WritableLDAPUserModelDelegate(local, this, ldapObject);
177  break;
178  case UNSYNCED:
179  proxied = new UnsyncedLDAPUserModelDelegate(local, this);
180  }
181 
182  List<ComponentModel> mappers = realm.getComponents(model.getId(), LDAPStorageMapper.class.getName());
183  List<ComponentModel> sortedMappers = mapperManager.sortMappersAsc(mappers);
184  for (ComponentModel mapperModel : sortedMappers) {
185  LDAPStorageMapper ldapMapper = mapperManager.getMapper(mapperModel);
186  proxied = ldapMapper.proxy(ldapObject, proxied, realm);
187  }
188 
189  userManager.setManagedProxiedUser(proxied, ldapObject);
190 
191  return proxied;
192  }
List< ComponentModel > sortMappersAsc(Collection< ComponentModel > mappers)
Definition: LDAPStorageMapperManager.java:50
UserModel proxy(LDAPObject ldapUser, UserModel delegate, RealmModel realm)
LDAPStorageMapper getMapper(ComponentModel mapperModel)
Definition: LDAPStorageMapperManager.java:40
EditMode editMode
Definition: LDAPStorageProvider.java:90
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
void setManagedProxiedUser(UserModel proxiedUser, LDAPObject ldapObject)
Definition: LDAPStorageUserManager.java:61
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
UserModel getManagedProxiedUser(String userId)
Definition: LDAPStorageUserManager.java:41
void checkDNChanged(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:194

◆ queryByEmail()

LDAPObject org.keycloak.storage.ldap.LDAPStorageProvider.queryByEmail ( RealmModel  realm,
String  email 
)
inlineprotected
521  {
522  LDAPQuery ldapQuery = LDAPUtils.createQueryForUserSearch(this, realm);
523  LDAPQueryConditionsBuilder conditionsBuilder = new LDAPQueryConditionsBuilder();
524 
525  // Mapper should replace "email" in parameter name with correct LDAP mapped attribute
526  Condition emailCondition = conditionsBuilder.equal(UserModel.EMAIL, email, EscapeStrategy.DEFAULT);
527  ldapQuery.addWhereCondition(emailCondition);
528 
529  return ldapQuery.getFirstResult();
530  }

◆ removeUser()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.removeUser ( RealmModel  realm,
UserModel  user 
)
inline
280  {
281  if (editMode == UserStorageProvider.EditMode.READ_ONLY || editMode == UserStorageProvider.EditMode.UNSYNCED) {
282  logger.warnf("User '%s' can't be deleted in LDAP as editMode is '%s'. Deleting user just from Keycloak DB, but he will be re-imported from LDAP again once searched in Keycloak", user.getUsername(), editMode.toString());
283  return true;
284  }
285 
286  LDAPObject ldapObject = loadAndValidateUser(realm, user);
287  if (ldapObject == null) {
288  logger.warnf("User '%s' can't be deleted from LDAP as it doesn't exist here", user.getUsername());
289  return false;
290  }
291 
292  ldapIdentityStore.remove(ldapObject);
293  userManager.removeManagedUserEntry(user.getId());
294 
295  return true;
296  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
void removeManagedUserEntry(String userId)
Definition: LDAPStorageUserManager.java:73
static final Logger logger
Definition: LDAPStorageProvider.java:84
EditMode editMode
Definition: LDAPStorageProvider.java:90
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94
void remove(LDAPObject ldapObject)
Definition: LDAPIdentityStore.java:152

◆ searchForUser() [1/4]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.searchForUser ( String  search,
RealmModel  realm 
)
inline
323  {
324  return searchForUser(search, realm, 0, Integer.MAX_VALUE - 1);
325  }
List< UserModel > searchForUser(String search, RealmModel realm)
Definition: LDAPStorageProvider.java:323

◆ searchForUser() [2/4]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.searchForUser ( String  search,
RealmModel  realm,
int  firstResult,
int  maxResults 
)
inline
328  {
329  Map<String, String> attributes = new HashMap<String, String>();
330  int spaceIndex = search.lastIndexOf(' ');
331  if (spaceIndex > -1) {
332  String firstName = search.substring(0, spaceIndex).trim();
333  String lastName = search.substring(spaceIndex).trim();
334  attributes.put(UserModel.FIRST_NAME, firstName);
335  attributes.put(UserModel.LAST_NAME, lastName);
336  } else if (search.indexOf('@') > -1) {
337  attributes.put(UserModel.USERNAME, search.trim().toLowerCase());
338  attributes.put(UserModel.EMAIL, search.trim().toLowerCase());
339  } else {
340  attributes.put(UserModel.LAST_NAME, search.trim());
341  attributes.put(UserModel.USERNAME, search.trim().toLowerCase());
342  }
343  return searchForUser(attributes, realm, firstResult, maxResults);
344  }
List< UserModel > searchForUser(String search, RealmModel realm)
Definition: LDAPStorageProvider.java:323

◆ searchForUser() [3/4]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.searchForUser ( Map< String, String >  params,
RealmModel  realm 
)
inline
347  {
348  return searchForUser(params, realm, 0, Integer.MAX_VALUE - 1);
349  }
List< UserModel > searchForUser(String search, RealmModel realm)
Definition: LDAPStorageProvider.java:323

◆ searchForUser() [4/4]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.searchForUser ( Map< String, String >  params,
RealmModel  realm,
int  firstResult,
int  maxResults 
)
inline
352  {
353  List<UserModel> searchResults =new LinkedList<UserModel>();
354 
355  List<LDAPObject> ldapUsers = searchLDAP(realm, params, maxResults + firstResult);
356  int counter = 0;
357  for (LDAPObject ldapUser : ldapUsers) {
358  if (counter++ < firstResult) continue;
359  String ldapUsername = LDAPUtils.getUsername(ldapUser, this.ldapIdentityStore.getConfig());
360  if (session.userLocalStorage().getUserByUsername(ldapUsername, realm) == null) {
361  UserModel imported = importUserFromLDAP(session, realm, ldapUser);
362  searchResults.add(imported);
363  }
364  }
365 
366  return searchResults;
367  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
UserModel importUserFromLDAP(KeycloakSession session, RealmModel realm, LDAPObject ldapUser)
Definition: LDAPStorageProvider.java:485
List< LDAPObject > searchLDAP(RealmModel realm, Map< String, String > attributes, int maxResults)
Definition: LDAPStorageProvider.java:405
KeycloakSession session
Definition: LDAPStorageProvider.java:87
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ searchForUserByUserAttribute()

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.searchForUserByUserAttribute ( String  attrName,
String  attrValue,
RealmModel  realm 
)
inline
214  {
215  LDAPQuery ldapQuery = LDAPUtils.createQueryForUserSearch(this, realm);
216  LDAPQueryConditionsBuilder conditionsBuilder = new LDAPQueryConditionsBuilder();
217 
218  Condition attrCondition = conditionsBuilder.equal(attrName, attrValue, EscapeStrategy.DEFAULT);
219  ldapQuery.addWhereCondition(attrCondition);
220 
221  List<LDAPObject> ldapObjects = ldapQuery.getResultList();
222 
223  if (ldapObjects == null || ldapObjects.isEmpty()) {
224  return Collections.emptyList();
225  }
226 
227  List<UserModel> searchResults =new LinkedList<UserModel>();
228 
229  for (LDAPObject ldapUser : ldapObjects) {
230  String ldapUsername = LDAPUtils.getUsername(ldapUser, this.ldapIdentityStore.getConfig());
231  if (session.userLocalStorage().getUserByUsername(ldapUsername, realm) == null) {
232  UserModel imported = importUserFromLDAP(session, realm, ldapUser);
233  searchResults.add(imported);
234  }
235  }
236 
237  return searchResults;
238 
239  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
UserModel importUserFromLDAP(KeycloakSession session, RealmModel realm, LDAPObject ldapUser)
Definition: LDAPStorageProvider.java:485
KeycloakSession session
Definition: LDAPStorageProvider.java:87
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83

◆ searchLDAP()

List<LDAPObject> org.keycloak.storage.ldap.LDAPStorageProvider.searchLDAP ( RealmModel  realm,
Map< String, String >  attributes,
int  maxResults 
)
inlineprotected
405  {
406 
407  List<LDAPObject> results = new ArrayList<LDAPObject>();
408  if (attributes.containsKey(UserModel.USERNAME)) {
409  LDAPQuery ldapQuery = LDAPUtils.createQueryForUserSearch(this, realm);
410  LDAPQueryConditionsBuilder conditionsBuilder = new LDAPQueryConditionsBuilder();
411 
412  // Mapper should replace "username" in parameter name with correct LDAP mapped attribute
413  Condition usernameCondition = conditionsBuilder.equal(UserModel.USERNAME, attributes.get(UserModel.USERNAME), EscapeStrategy.NON_ASCII_CHARS_ONLY);
414  ldapQuery.addWhereCondition(usernameCondition);
415 
416  List<LDAPObject> ldapObjects = ldapQuery.getResultList();
417  results.addAll(ldapObjects);
418  }
419 
420  if (attributes.containsKey(UserModel.EMAIL)) {
421  LDAPQuery ldapQuery = LDAPUtils.createQueryForUserSearch(this, realm);
422  LDAPQueryConditionsBuilder conditionsBuilder = new LDAPQueryConditionsBuilder();
423 
424  // Mapper should replace "email" in parameter name with correct LDAP mapped attribute
425  Condition emailCondition = conditionsBuilder.equal(UserModel.EMAIL, attributes.get(UserModel.EMAIL), EscapeStrategy.NON_ASCII_CHARS_ONLY);
426  ldapQuery.addWhereCondition(emailCondition);
427 
428  List<LDAPObject> ldapObjects = ldapQuery.getResultList();
429  results.addAll(ldapObjects);
430  }
431 
432  if (attributes.containsKey(UserModel.FIRST_NAME) || attributes.containsKey(UserModel.LAST_NAME)) {
433  LDAPQuery ldapQuery = LDAPUtils.createQueryForUserSearch(this, realm);
434  LDAPQueryConditionsBuilder conditionsBuilder = new LDAPQueryConditionsBuilder();
435 
436  // Mapper should replace parameter with correct LDAP mapped attributes
437  if (attributes.containsKey(UserModel.FIRST_NAME)) {
438  ldapQuery.addWhereCondition(conditionsBuilder.equal(UserModel.FIRST_NAME, attributes.get(UserModel.FIRST_NAME), EscapeStrategy.NON_ASCII_CHARS_ONLY));
439  }
440  if (attributes.containsKey(UserModel.LAST_NAME)) {
441  ldapQuery.addWhereCondition(conditionsBuilder.equal(UserModel.LAST_NAME, attributes.get(UserModel.LAST_NAME), EscapeStrategy.NON_ASCII_CHARS_ONLY));
442  }
443 
444  List<LDAPObject> ldapObjects = ldapQuery.getResultList();
445  results.addAll(ldapObjects);
446  }
447 
448  return results;
449  }

◆ setUpdater()

void org.keycloak.storage.ldap.LDAPStorageProvider.setUpdater ( PasswordUpdateCallback  updater)
inline
118  {
119  this.updater = updater;
120  }
PasswordUpdateCallback updater
Definition: LDAPStorageProvider.java:92

◆ supportsCredentialAuthenticationFor()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.supportsCredentialAuthenticationFor ( String  type)
inline
209  {
210  return type.equals(CredentialModel.KERBEROS) && kerberosConfig.isAllowKerberosAuthentication();
211  }
boolean isAllowKerberosAuthentication()
Definition: CommonKerberosConfig.java:49
LDAPProviderKerberosConfig kerberosConfig
Definition: LDAPStorageProvider.java:91

◆ supportsCredentialType()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.supportsCredentialType ( String  credentialType)
inline
653  {
654  return getSupportedCredentialTypes().contains(credentialType);
655  }
Set< String > getSupportedCredentialTypes()
Definition: LDAPStorageProvider.java:647

◆ synchronizeRegistrations()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.synchronizeRegistrations ( )
inline
241  {
242  return "true".equalsIgnoreCase(model.getConfig().getFirst(LDAPConstants.SYNC_REGISTRATIONS)) && editMode == UserStorageProvider.EditMode.WRITABLE;
243  }
EditMode editMode
Definition: LDAPStorageProvider.java:90
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88

◆ updateCredential()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.updateCredential ( RealmModel  realm,
UserModel  user,
CredentialInput  input 
)
inline
599  {
600  if (!CredentialModel.PASSWORD.equals(input.getType()) || ! (input instanceof PasswordUserCredentialModel)) return false;
601  if (editMode == UserStorageProvider.EditMode.READ_ONLY) {
602  throw new ReadOnlyException("Federated storage is not writable");
603 
604  } else if (editMode == UserStorageProvider.EditMode.WRITABLE) {
605  LDAPIdentityStore ldapIdentityStore = getLdapIdentityStore();
606  PasswordUserCredentialModel cred = (PasswordUserCredentialModel)input;
607  String password = cred.getValue();
608  LDAPObject ldapUser = loadAndValidateUser(realm, user);
609  if (ldapIdentityStore.getConfig().isValidatePasswordPolicy()) {
610  PolicyError error = session.getProvider(PasswordPolicyManagerProvider.class).validate(realm, user, password);
611  if (error != null) throw new ModelException(error.getMessage(), error.getParameters());
612  }
613  try {
614  LDAPOperationDecorator operationDecorator = null;
615  if (updater != null) {
616  operationDecorator = updater.beforePasswordUpdate(user, ldapUser, cred);
617  }
618 
619  ldapIdentityStore.updatePassword(ldapUser, password, operationDecorator);
620 
621  if (updater != null) updater.passwordUpdated(user, ldapUser, cred);
622  return true;
623  } catch (ModelException me) {
624  if (updater != null) {
625  updater.passwordUpdateFailed(user, ldapUser, cred, me);
626  return false;
627  } else {
628  throw me;
629  }
630  }
631 
632  } else {
633  return false;
634  }
635  }
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
void passwordUpdateFailed(UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password, ModelException exception)
PasswordUpdateCallback updater
Definition: LDAPStorageProvider.java:92
EditMode editMode
Definition: LDAPStorageProvider.java:90
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
KeycloakSession session
Definition: LDAPStorageProvider.java:87
void passwordUpdated(UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password)
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
LDAPOperationDecorator beforePasswordUpdate(UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password)

◆ validate()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.validate ( RealmModel  realm,
UserModel  local 
)
inline
148  {
149  LDAPObject ldapObject = loadAndValidateUser(realm, local);
150  if (ldapObject == null) {
151  return null;
152  }
153 
154  return proxy(realm, local, ldapObject);
155  }
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
UserModel proxy(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:157

◆ validPassword()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.validPassword ( RealmModel  realm,
UserModel  user,
String  password 
)
inline
569  {
571  // Use Kerberos JAAS (Krb5LoginModule)
572  KerberosUsernamePasswordAuthenticator authenticator = factory.createKerberosUsernamePasswordAuthenticator(kerberosConfig);
573  return authenticator.validUser(user.getUsername(), password);
574  } else {
575  // Use Naming LDAP API
576  LDAPObject ldapUser = loadAndValidateUser(realm, user);
577 
578  try {
579  ldapIdentityStore.validatePassword(ldapUser, password);
580  return true;
581  } catch (AuthenticationException ae) {
582  boolean processed = false;
583  List<ComponentModel> mappers = realm.getComponents(model.getId(), LDAPStorageMapper.class.getName());
584  List<ComponentModel> sortedMappers = mapperManager.sortMappersDesc(mappers);
585  for (ComponentModel mapperModel : sortedMappers) {
586  if (logger.isTraceEnabled()) {
587  logger.tracef("Using mapper %s during import user from LDAP", mapperModel);
588  }
589  LDAPStorageMapper ldapMapper = mapperManager.getMapper(mapperModel);
590  processed = processed || ldapMapper.onAuthenticationFailure(ldapUser, user, ae, realm);
591  }
592  return processed;
593  }
594  }
595  }
LDAPStorageProviderFactory factory
Definition: LDAPStorageProvider.java:86
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
LDAPStorageMapper getMapper(ComponentModel mapperModel)
Definition: LDAPStorageMapperManager.java:40
boolean validUser(String username, String password)
Definition: KerberosUsernamePasswordAuthenticator.java:88
static final Logger logger
Definition: LDAPStorageProvider.java:84
boolean isAllowKerberosAuthentication()
Definition: CommonKerberosConfig.java:49
boolean isUseKerberosForPasswordAuthentication()
Definition: LDAPProviderKerberosConfig.java:41
void validatePassword(LDAPObject user, String password)
Definition: LDAPIdentityStore.java:232
KerberosUsernamePasswordAuthenticator createKerberosUsernamePasswordAuthenticator(CommonKerberosConfig kerberosConfig)
Definition: LDAPStorageProviderFactory.java:625
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPProviderKerberosConfig kerberosConfig
Definition: LDAPStorageProvider.java:91
boolean onAuthenticationFailure(LDAPObject ldapUser, UserModel user, AuthenticationException ldapException, RealmModel realm)
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
List< ComponentModel > sortMappersDesc(Collection< ComponentModel > mappers)
Definition: LDAPStorageMapperManager.java:54

メンバ詳解

◆ editMode

EditMode org.keycloak.storage.ldap.LDAPStorageProvider.editMode
protected

◆ factory

LDAPStorageProviderFactory org.keycloak.storage.ldap.LDAPStorageProvider.factory
protected

◆ kerberosConfig

LDAPProviderKerberosConfig org.keycloak.storage.ldap.LDAPStorageProvider.kerberosConfig
protected

◆ ldapIdentityStore

LDAPIdentityStore org.keycloak.storage.ldap.LDAPStorageProvider.ldapIdentityStore
protected

◆ logger

final Logger org.keycloak.storage.ldap.LDAPStorageProvider.logger = Logger.getLogger(LDAPStorageProvider.class)
staticprivate

◆ mapperManager

LDAPStorageMapperManager org.keycloak.storage.ldap.LDAPStorageProvider.mapperManager
protected

◆ model

UserStorageProviderModel org.keycloak.storage.ldap.LDAPStorageProvider.model
protected

◆ session

KeycloakSession org.keycloak.storage.ldap.LDAPStorageProvider.session
protected

◆ supportedCredentialTypes

final Set<String> org.keycloak.storage.ldap.LDAPStorageProvider.supportedCredentialTypes = new HashSet<>()
protected

◆ updater

PasswordUpdateCallback org.keycloak.storage.ldap.LDAPStorageProvider.updater
protected

◆ userManager

LDAPStorageUserManager org.keycloak.storage.ldap.LDAPStorageProvider.userManager
protected

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