keycloak
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 非公開メンバ関数 | 静的非公開変数類 | 全メンバ一覧
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< UserModelsearchForUserByUserAttribute (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< UserModelgetUsers (RealmModel realm)
 
List< UserModelgetUsers (RealmModel realm, int firstResult, int maxResults)
 
List< UserModelsearchForUser (String search, RealmModel realm)
 
List< UserModelsearchForUser (String search, RealmModel realm, int firstResult, int maxResults)
 
List< UserModelsearchForUser (Map< String, String > params, RealmModel realm)
 
List< UserModelsearchForUser (Map< String, String > params, RealmModel realm, int firstResult, int maxResults)
 
List< UserModelgetGroupMembers (RealmModel realm, GroupModel group)
 
List< UserModelgetGroupMembers (RealmModel realm, GroupModel group, int firstResult, int maxResults)
 
List< UserModelloadUsersByUsernames (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)
 
default int getUsersCount (RealmModel realm, boolean includeServiceAccount)
 
default List< UserModelgetRoleMembers (RealmModel realm, RoleModel role)
 
default List< UserModelgetRoleMembers (RealmModel realm, RoleModel role, int firstResult, int maxResults)
 

限定公開メンバ関数

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 
115  }
116  }
final Set< String > supportedCredentialTypes
Definition: LDAPStorageProvider.java:100
Definition: UserCredentialModel.java:32
static final String KERBEROS
Definition: UserCredentialModel.java:42
UserStorageProvider.EditMode getEditMode()
Definition: LDAPConfig.java:222
boolean isAllowKerberosAuthentication()
Definition: CommonKerberosConfig.java:49
LDAPStorageProviderFactory factory
Definition: LDAPStorageProvider.java:86
static final String PASSWORD
Definition: UserCredentialModel.java:33
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
EditMode editMode
Definition: LDAPStorageProvider.java:90
Definition: UserStorageProviderModel.java:28
LDAPProviderKerberosConfig kerberosConfig
Definition: LDAPStorageProvider.java:91
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
KeycloakSession session
Definition: LDAPStorageProvider.java:87
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94

関数詳解

◆ addUser()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.addUser ( RealmModel  realm,
String  username 
)
inline

org.keycloak.storage.user.UserRegistrationProviderを実装しています。

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  }
271  if (r.isEnabled() && r.isDefaultAction()) {
272  proxy.addRequiredAction(r.getAlias());
273  }
274  }
275 
276  return proxy;
277  }
Definition: UserModel.java:30
String getId()
Definition: ComponentModel.java:55
List< RequiredActionProviderModel > getRequiredActionProviders()
static final String LDAP_ID
Definition: LDAPConstants.java:86
static final String LDAP_ENTRY_DN
Definition: LDAPConstants.java:87
Definition: LDAPConstants.java:25
boolean isImportEnabled()
Definition: UserStorageProviderModel.java:48
List< GroupModel > getDefaultGroups()
void setFederationLink(String link)
void addRequiredAction(String action)
void setSingleAttribute(String name, String value)
void setUsername(String username)
Definition: GroupModel.java:30
void joinGroup(GroupModel group)
UserModel proxy(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:157
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
boolean synchronizeRegistrations()
Definition: LDAPStorageProvider.java:241
UserModel addUser(RealmModel realm, String id, String username, boolean addDefaultRoles, boolean addDefaultRequiredActions)
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
KeycloakSession session
Definition: LDAPStorageProvider.java:87
Definition: RequiredActionProviderModel.java:29

◆ authenticate()

CredentialValidationOutput org.keycloak.storage.ldap.LDAPStorageProvider.authenticate ( RealmModel  realm,
CredentialInput  cred 
)
inline

org.keycloak.credential.CredentialAuthenticationを実装しています。

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());
694  } else {
695  String delegationCredential = spnegoAuthenticator.getSerializedDelegationCredential();
696  if (delegationCredential != null) {
697  state.put(KerberosConstants.GSS_DELEGATION_CREDENTIAL, delegationCredential);
698  }
699 
701  }
702  } else {
703  state.put(KerberosConstants.RESPONSE_TOKEN, spnegoAuthenticator.getResponseToken());
705  }
706  }
707  }
708 
710  }
void authenticate()
Definition: SPNEGOAuthenticator.java:61
Definition: CredentialValidationOutput.java:28
Definition: UserModel.java:30
Definition: UserCredentialModel.java:32
SPNEGOAuthenticator createSPNEGOAuthenticator(String spnegoToken, CommonKerberosConfig kerberosConfig)
Definition: LDAPStorageProviderFactory.java:616
boolean isAllowKerberosAuthentication()
Definition: CommonKerberosConfig.java:49
AUTHENTICATED
Definition: CredentialValidationOutput.java:66
CONTINUE
Definition: CredentialValidationOutput.java:66
String getType()
Definition: UserCredentialModel.java:120
LDAPStorageProviderFactory factory
Definition: LDAPStorageProvider.java:86
Definition: CredentialValidationOutput.java:65
LDAPProviderKerberosConfig kerberosConfig
Definition: LDAPStorageProvider.java:91
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
UserModel findOrCreateAuthenticatedUser(RealmModel realm, String username)
Definition: LDAPStorageProvider.java:723
static final Logger logger
Definition: LDAPStorageProvider.java:84
String getValue()
Definition: UserCredentialModel.java:128
static CredentialValidationOutput failed()
Definition: CredentialValidationOutput.java:40
String getName()
Definition: ComponentModel.java:63

◆ 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);
200 
201  UserCache userCache = session.userCache();
202  if (userCache != null) {
203  userCache.evict(realm, local);
204  }
205  }
206  }
static final String LDAP_ENTRY_DN
Definition: LDAPConstants.java:87
Definition: LDAPConstants.java:25
void setSingleAttribute(String name, String value)
String getFirstAttribute(String name)
void evict(RealmModel realm, UserModel user)
KeycloakSession session
Definition: LDAPStorageProvider.java:87
static final Logger logger
Definition: LDAPStorageProvider.java:84
Definition: UserCache.java:30

◆ close()

void org.keycloak.storage.ldap.LDAPStorageProvider.close ( )
inline

org.keycloak.provider.Providerを実装しています。

713  {
714  }

◆ disableCredentialType()

void org.keycloak.storage.ldap.LDAPStorageProvider.disableCredentialType ( RealmModel  realm,
UserModel  user,
String  credentialType 
)
inline

org.keycloak.credential.CredentialInputUpdaterを実装しています。

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",
737  logger.warn("Will re-create user");
738  UserCache userCache = session.userCache();
739  if (userCache != null) {
740  userCache.evict(realm, user);
741  }
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  }
Definition: UserModel.java:30
String getId()
Definition: ComponentModel.java:55
boolean removeUser(RealmModel realm, UserModel user)
Definition: UserManager.java:31
static final String LDAP_ID
Definition: LDAPConstants.java:86
Definition: LDAPConstants.java:25
String getFirstAttribute(String name)
UserModel getUserByUsername(String username, RealmModel realm)
Definition: LDAPStorageProvider.java:476
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
Definition: UserManager.java:23
UserModel proxy(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:157
void evict(RealmModel realm, UserModel user)
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
KeycloakSession session
Definition: LDAPStorageProvider.java:87
static final Logger logger
Definition: LDAPStorageProvider.java:84
UserModel getUserByUsername(String username, RealmModel realm)
Definition: UserCache.java:30
String getName()
Definition: ComponentModel.java:63

◆ getDisableableCredentialTypes()

Set<String> org.keycloak.storage.ldap.LDAPStorageProvider.getDisableableCredentialTypes ( RealmModel  realm,
UserModel  user 
)
inline

org.keycloak.credential.CredentialInputUpdaterを実装しています。

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

org.keycloak.storage.user.UserQueryProviderを実装しています。

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

org.keycloak.storage.user.UserQueryProviderを実装しています。

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  }
Definition: ComponentModel.java:31
String getId()
Definition: ComponentModel.java:55
List< UserModel > getGroupMembers(RealmModel realm, GroupModel group, int firstResult, int maxResults)
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
List< ComponentModel > getComponents(String parentId, String providerType)
List< ComponentModel > sortMappersAsc(Collection< ComponentModel > mappers)
Definition: LDAPStorageMapperManager.java:50
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPStorageMapper getMapper(ComponentModel mapperModel)
Definition: LDAPStorageMapperManager.java:40

◆ 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

◆ getRoleMembers() [1/2]

default List<UserModel> org.keycloak.storage.user.UserQueryProvider.getRoleMembers ( RealmModel  realm,
RoleModel  role 
)
inlineinherited

Get users that belong to a specific role.

引数
realm
role
戻り値

org.keycloak.models.jpa.JpaUserProvider, org.keycloak.models.cache.infinispan.UserCacheSession, org.keycloak.storage.UserStorageManagerで実装されています。

149  {
150  return Collections.EMPTY_LIST;
151  }

◆ getRoleMembers() [2/2]

default List<UserModel> org.keycloak.storage.user.UserQueryProvider.getRoleMembers ( RealmModel  realm,
RoleModel  role,
int  firstResult,
int  maxResults 
)
inlineinherited

Search for users that have a specific role with a specific roleId.

引数
firstResult
maxResults
role
戻り値

org.keycloak.models.jpa.JpaUserProvider, org.keycloak.storage.UserStorageManager, org.keycloak.models.cache.infinispan.UserCacheSessionで実装されています。

164  {
165  return Collections.EMPTY_LIST;
166  }

◆ 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

org.keycloak.storage.user.UserLookupProviderを実装しています。

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  }
Definition: UserModel.java:30
static final String LDAP_ID
Definition: LDAPConstants.java:86
Definition: LDAPConstants.java:25
String getFirstAttribute(String name)
LDAPObject queryByEmail(RealmModel realm, String email)
Definition: LDAPStorageProvider.java:521
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
Definition: ModelDuplicateException.java:23
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
KeycloakSession session
Definition: LDAPStorageProvider.java:87
UserModel getUserByUsername(String username, RealmModel realm)
UserModel importUserFromLDAP(KeycloakSession session, RealmModel realm, LDAPObject ldapUser)
Definition: LDAPStorageProvider.java:485

◆ getUserById()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.getUserById ( String  id,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserLookupProviderを実装しています。

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  }
Definition: UserModel.java:30
UserModel getManagedProxiedUser(String userId)
Definition: LDAPStorageUserManager.java:41
UserModel getUserByUsername(String username, RealmModel realm)
Definition: LDAPStorageProvider.java:476
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94

◆ getUserByUsername()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.getUserByUsername ( String  username,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserLookupProviderを実装しています。

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

◆ 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

org.keycloak.storage.user.UserQueryProviderを実装しています。

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

org.keycloak.storage.user.UserQueryProviderを実装しています。

318  {
319  return Collections.EMPTY_LIST;
320  }

◆ getUsersCount() [1/2]

default int org.keycloak.storage.user.UserQueryProvider.getUsersCount ( RealmModel  realm,
boolean  includeServiceAccount 
)
inlineinherited

Returns the number of users.

引数
realmthe realm
includeServiceAccountif true, the number of users will also include service accounts. Otherwise, only the number of users.
戻り値
the number of users

org.keycloak.models.jpa.JpaUserProvider, org.keycloak.models.cache.infinispan.UserCacheSession, org.keycloak.storage.UserStorageManagerで実装されています。

53  {
54  throw new RuntimeException("Not implemented");
55  }

◆ getUsersCount() [2/2]

int org.keycloak.storage.ldap.LDAPStorageProvider.getUsersCount ( RealmModel  realm)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

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();
511  imported.setSingleAttribute(LDAPConstants.LDAP_ID, ldapUser.getUuid());
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  }
List< ComponentModel > sortMappersDesc(Collection< ComponentModel > mappers)
Definition: LDAPStorageMapperManager.java:54
Definition: UserModel.java:30
Definition: ComponentModel.java:31
String getId()
Definition: ComponentModel.java:55
static final String LDAP_ID
Definition: LDAPConstants.java:86
static final String LDAP_ENTRY_DN
Definition: LDAPConstants.java:87
Definition: LDAPConstants.java:25
boolean isImportEnabled()
Definition: UserStorageProviderModel.java:48
void setFederationLink(String link)
void setSingleAttribute(String name, String value)
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
List< ComponentModel > getComponents(String parentId, String providerType)
void onImportUserFromLDAP(LDAPObject ldapUser, UserModel user, RealmModel realm, boolean isCreate)
UserModel proxy(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:157
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
void setEnabled(boolean enabled)
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
UserModel addUser(RealmModel realm, String id, String username, boolean addDefaultRoles, boolean addDefaultRequiredActions)
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPStorageMapper getMapper(ComponentModel mapperModel)
Definition: LDAPStorageMapperManager.java:40
static final Logger logger
Definition: LDAPStorageProvider.java:84

◆ isConfiguredFor()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.isConfiguredFor ( RealmModel  realm,
UserModel  user,
String  credentialType 
)
inline

org.keycloak.credential.CredentialInputValidatorを実装しています。

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

org.keycloak.credential.CredentialInputValidatorを実装しています。

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  }
Definition: UserCredentialModel.java:32
boolean isConfiguredLocally(RealmModel realm, UserModel user, String type)
UserCredentialManager userCredentialManager()
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  }
LDAPObject loadLDAPUserByUsername(RealmModel realm, String username)
Definition: LDAPStorageProvider.java:752
static final String LDAP_ID
Definition: LDAPConstants.java:86
Definition: LDAPConstants.java:25
String getFirstAttribute(String name)
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
static final Logger logger
Definition: LDAPStorageProvider.java:84
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94
LDAPObject getManagedLDAPUser(String userId)
Definition: LDAPStorageUserManager.java:46

◆ 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  }
String getUsernameLdapAttribute()
Definition: LDAPConfig.java:188
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89

◆ 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  }
Definition: UserModel.java:30
String getId()
Definition: ComponentModel.java:55
boolean isImportEnabled()
Definition: UserStorageProviderModel.java:48
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
KeycloakSession session
Definition: LDAPStorageProvider.java:87
static final Logger logger
Definition: LDAPStorageProvider.java:84
UserModel getUserByUsername(String username, RealmModel realm)

◆ preRemove() [1/3]

void org.keycloak.storage.ldap.LDAPStorageProvider.preRemove ( RealmModel  realm)
inline

org.keycloak.storage.UserStorageProviderを実装しています。

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

org.keycloak.storage.UserStorageProviderを実装しています。

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

org.keycloak.storage.UserStorageProviderを実装しています。

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  }
Definition: UserModel.java:30
Definition: ComponentModel.java:31
String getId()
Definition: ComponentModel.java:55
boolean isImportEnabled()
Definition: UserStorageProviderModel.java:48
void checkDNChanged(RealmModel realm, UserModel local, LDAPObject ldapObject)
Definition: LDAPStorageProvider.java:194
UserModel getManagedProxiedUser(String userId)
Definition: LDAPStorageUserManager.java:41
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
EditMode editMode
Definition: LDAPStorageProvider.java:90
List< ComponentModel > getComponents(String parentId, String providerType)
List< ComponentModel > sortMappersAsc(Collection< ComponentModel > mappers)
Definition: LDAPStorageMapperManager.java:50
void setManagedProxiedUser(UserModel proxiedUser, LDAPObject ldapObject)
Definition: LDAPStorageUserManager.java:61
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPStorageMapper getMapper(ComponentModel mapperModel)
Definition: LDAPStorageMapperManager.java:40
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94

◆ 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  }
Definition: UserModel.java:30
String EMAIL
Definition: UserModel.java:34

◆ removeUser()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.removeUser ( RealmModel  realm,
UserModel  user 
)
inline

org.keycloak.storage.user.UserRegistrationProviderを実装しています。

280  {
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);
294 
295  return true;
296  }
READ_ONLY
Definition: UserStorageProvider.java:75
UNSYNCED
Definition: UserStorageProvider.java:85
void remove(LDAPObject ldapObject)
Definition: LDAPIdentityStore.java:152
Definition: UserStorageProvider.java:71
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
EditMode editMode
Definition: LDAPStorageProvider.java:90
Definition: UserStorageProvider.java:28
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
static final Logger logger
Definition: LDAPStorageProvider.java:84
void removeManagedUserEntry(String userId)
Definition: LDAPStorageUserManager.java:73
LDAPStorageUserManager userManager
Definition: LDAPStorageProvider.java:94

◆ searchForUser() [1/4]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.searchForUser ( String  search,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

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

org.keycloak.storage.user.UserQueryProviderを実装しています。

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  }
String LAST_NAME
Definition: UserModel.java:32
Definition: UserModel.java:30
String FIRST_NAME
Definition: UserModel.java:33
String EMAIL
Definition: UserModel.java:34
List< UserModel > searchForUser(String search, RealmModel realm)
Definition: LDAPStorageProvider.java:323
String USERNAME
Definition: UserModel.java:31

◆ searchForUser() [3/4]

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.searchForUser ( Map< String, String >  params,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

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

org.keycloak.storage.user.UserQueryProviderを実装しています。

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  }
List< LDAPObject > searchLDAP(RealmModel realm, Map< String, String > attributes, int maxResults)
Definition: LDAPStorageProvider.java:405
Definition: UserModel.java:30
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
KeycloakSession session
Definition: LDAPStorageProvider.java:87
UserModel getUserByUsername(String username, RealmModel realm)
UserModel importUserFromLDAP(KeycloakSession session, RealmModel realm, LDAPObject ldapUser)
Definition: LDAPStorageProvider.java:485

◆ searchForUserByUserAttribute()

List<UserModel> org.keycloak.storage.ldap.LDAPStorageProvider.searchForUserByUserAttribute ( String  attrName,
String  attrValue,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

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  }
Definition: UserModel.java:30
LDAPConfig getConfig()
Definition: LDAPIdentityStore.java:83
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
KeycloakSession session
Definition: LDAPStorageProvider.java:87
UserModel getUserByUsername(String username, RealmModel realm)
UserModel importUserFromLDAP(KeycloakSession session, RealmModel realm, LDAPObject ldapUser)
Definition: LDAPStorageProvider.java:485

◆ 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  }
String LAST_NAME
Definition: UserModel.java:32
Definition: UserModel.java:30
String FIRST_NAME
Definition: UserModel.java:33
String EMAIL
Definition: UserModel.java:34
String USERNAME
Definition: UserModel.java:31

◆ 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

org.keycloak.credential.CredentialAuthenticationを実装しています。

209  {
211  }
static final String KERBEROS
Definition: CredentialModel.java:39
Definition: CredentialModel.java:29
boolean isAllowKerberosAuthentication()
Definition: CommonKerberosConfig.java:49
LDAPProviderKerberosConfig kerberosConfig
Definition: LDAPStorageProvider.java:91

◆ supportsCredentialType()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.supportsCredentialType ( String  credentialType)
inline

org.keycloak.credential.CredentialInputUpdaterを実装しています。

653  {
654  return getSupportedCredentialTypes().contains(credentialType);
655  }
Set< String > getSupportedCredentialTypes()
Definition: LDAPStorageProvider.java:647

◆ synchronizeRegistrations()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.synchronizeRegistrations ( )
inline
241  {
243  }
V getFirst(K key)
Definition: MultivaluedHashMap.java:86
Definition: LDAPConstants.java:25
MultivaluedHashMap< String, String > getConfig()
Definition: ComponentModel.java:71
static final String SYNC_REGISTRATIONS
Definition: LDAPConstants.java:80
Definition: UserStorageProvider.java:71
EditMode editMode
Definition: LDAPStorageProvider.java:90
Definition: UserStorageProvider.java:28
WRITABLE
Definition: UserStorageProvider.java:80
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88

◆ updateCredential()

boolean org.keycloak.storage.ldap.LDAPStorageProvider.updateCredential ( RealmModel  realm,
UserModel  user,
CredentialInput  input 
)
inline

org.keycloak.credential.CredentialInputUpdaterを実装しています。

599  {
600  if (!CredentialModel.PASSWORD.equals(input.getType()) || ! (input instanceof PasswordUserCredentialModel)) return false;
602  throw new ReadOnlyException("Federated storage is not writable");
603 
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  }
PasswordUpdateCallback updater
Definition: LDAPStorageProvider.java:92
static final String PASSWORD
Definition: CredentialModel.java:30
Definition: CredentialModel.java:29
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
READ_ONLY
Definition: UserStorageProvider.java:75
void passwordUpdateFailed(UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password, ModelException exception)
void passwordUpdated(UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password)
< T extends Provider > T getProvider(Class< T > clazz)
Definition: UserStorageProvider.java:71
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
EditMode editMode
Definition: LDAPStorageProvider.java:90
Definition: ModelException.java:23
Definition: UserStorageProvider.java:28
LDAPOperationDecorator beforePasswordUpdate(UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password)
WRITABLE
Definition: UserStorageProvider.java:80
Definition: PasswordUserCredentialModel.java:25
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
KeycloakSession session
Definition: LDAPStorageProvider.java:87
String getValue()
Definition: UserCredentialModel.java:128

◆ validate()

UserModel org.keycloak.storage.ldap.LDAPStorageProvider.validate ( RealmModel  realm,
UserModel  local 
)
inline

org.keycloak.storage.user.ImportedUserValidationを実装しています。

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  }
List< ComponentModel > sortMappersDesc(Collection< ComponentModel > mappers)
Definition: LDAPStorageMapperManager.java:54
void validatePassword(LDAPObject user, String password)
Definition: LDAPIdentityStore.java:232
Definition: ComponentModel.java:31
String getId()
Definition: ComponentModel.java:55
boolean isAllowKerberosAuthentication()
Definition: CommonKerberosConfig.java:49
boolean validUser(String username, String password)
Definition: KerberosUsernamePasswordAuthenticator.java:88
LDAPStorageProviderFactory factory
Definition: LDAPStorageProvider.java:86
boolean onAuthenticationFailure(LDAPObject ldapUser, UserModel user, AuthenticationException ldapException, RealmModel realm)
LDAPStorageMapperManager mapperManager
Definition: LDAPStorageProvider.java:93
LDAPObject loadAndValidateUser(RealmModel realm, UserModel local)
Definition: LDAPStorageProvider.java:455
List< ComponentModel > getComponents(String parentId, String providerType)
KerberosUsernamePasswordAuthenticator createKerberosUsernamePasswordAuthenticator(CommonKerberosConfig kerberosConfig)
Definition: LDAPStorageProviderFactory.java:625
LDAPProviderKerberosConfig kerberosConfig
Definition: LDAPStorageProvider.java:91
LDAPIdentityStore ldapIdentityStore
Definition: LDAPStorageProvider.java:89
UserStorageProviderModel model
Definition: LDAPStorageProvider.java:88
LDAPStorageMapper getMapper(ComponentModel mapperModel)
Definition: LDAPStorageMapperManager.java:40
static final Logger logger
Definition: LDAPStorageProvider.java:84
boolean isUseKerberosForPasswordAuthentication()
Definition: LDAPProviderKerberosConfig.java:41

メンバ詳解

◆ 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

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