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

クラス

class  MSADUserModelDelegate
 

公開メンバ関数

 MSADLDSUserAccountControlStorageMapper (ComponentModel mapperModel, LDAPStorageProvider ldapProvider)
 
void beforeLDAPQuery (LDAPQuery query)
 
LDAPOperationDecorator beforePasswordUpdate (UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password)
 
void passwordUpdated (UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password)
 
void passwordUpdateFailed (UserModel user, LDAPObject ldapUser, PasswordUserCredentialModel password, ModelException exception)
 
UserModel proxy (LDAPObject ldapUser, UserModel delegate, RealmModel realm)
 
void onRegisterUserToLDAP (LDAPObject ldapUser, UserModel localUser, RealmModel realm)
 
void onImportUserFromLDAP (LDAPObject ldapUser, UserModel user, RealmModel realm, boolean isCreate)
 
boolean onAuthenticationFailure (LDAPObject ldapUser, UserModel user, AuthenticationException ldapException, RealmModel realm)
 
SynchronizationResult syncDataFromFederationProviderToKeycloak (RealmModel realm)
 
SynchronizationResult syncDataFromKeycloakToFederationProvider (RealmModel realm)
 
List< UserModelgetGroupMembers (RealmModel realm, GroupModel group, int firstResult, int maxResults)
 
LDAPStorageProvider getLdapProvider ()
 
void close ()
 

静的公開メンバ関数

static boolean parseBooleanParameter (ComponentModel mapperModel, String paramName)
 

限定公開メンバ関数

boolean processAuthErrorCode (String errorCode, UserModel user)
 
ModelException processFailedPasswordUpdateException (ModelException e)
 

限定公開変数類

final KeycloakSession session
 
final ComponentModel mapperModel
 
final LDAPStorageProvider ldapProvider
 

静的非公開変数類

static final Logger logger = Logger.getLogger(MSADLDSUserAccountControlStorageMapper.class)
 
static final Pattern AUTH_EXCEPTION_REGEX = Pattern.compile(".*AcceptSecurityContext error, data ([0-9a-f]*), v.*")
 
static final Pattern AUTH_INVALID_NEW_PASSWORD = Pattern.compile("(?s).*problem 1005 \\(CONSTRAINT_ATT_TYPE\\), data [0-9a-f]*, Att 23 \\(userPassword\\).*")
 

詳解

Mapper specific to MSAD LDS. It's able to read the msDS-UserAccountDisabled, msDS-UserPasswordExpired and pwdLastSet attributes and set actions in Keycloak based on that. It's also able to handle exception code from LDAP user authentication (See http://www-01.ibm.com/support/docview.wss?uid=swg21290631 )

著者
Marek Posolda
Slawomir Dabek

構築子と解体子

◆ MSADLDSUserAccountControlStorageMapper()

org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.MSADLDSUserAccountControlStorageMapper ( ComponentModel  mapperModel,
LDAPStorageProvider  ldapProvider 
)
inline
57  {
58  super(mapperModel, ldapProvider);
60  }
final ComponentModel mapperModel
Definition: AbstractLDAPStorageMapper.java:43
void setUpdater(PasswordUpdateCallback updater)
Definition: LDAPStorageProvider.java:118
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44

関数詳解

◆ beforeLDAPQuery()

void org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.beforeLDAPQuery ( LDAPQuery  query)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

63  {
64  query.addReturningLdapAttribute(LDAPConstants.PWD_LAST_SET);
65  query.addReturningLdapAttribute(LDAPConstants.MSDS_USER_ACCOUNT_DISABLED);
66 
67  // This needs to be read-only and can be set to writable just on demand
68  query.addReturningReadOnlyLdapAttribute(LDAPConstants.PWD_LAST_SET);
69 
70  if (ldapProvider.getEditMode() != UserStorageProvider.EditMode.WRITABLE) {
71  query.addReturningReadOnlyLdapAttribute(LDAPConstants.MSDS_USER_ACCOUNT_DISABLED);
72  }
73  }
EditMode getEditMode()
Definition: LDAPStorageProvider.java:130
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
WRITABLE
Definition: UserStorageProvider.java:80

◆ beforePasswordUpdate()

LDAPOperationDecorator org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.beforePasswordUpdate ( UserModel  user,
LDAPObject  ldapUser,
PasswordUserCredentialModel  password 
)
inline

org.keycloak.storage.ldap.mappers.PasswordUpdateCallbackを実装しています。

76  {
77  return null; // Not supported for now. Not sure if LDAP_SERVER_POLICY_HINTS_OID works in MSAD LDS
78  }

◆ close()

void org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.close ( )
inlineinherited

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

85  {
86 
87  }

◆ getGroupMembers()

List<UserModel> org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.getGroupMembers ( RealmModel  realm,
GroupModel  group,
int  firstResult,
int  maxResults 
)
inlineinherited

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

63  {
64  return Collections.emptyList();
65  }

◆ getLdapProvider()

LDAPStorageProvider org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.getLdapProvider ( )
inlineinherited
79  {
80  return ldapProvider;
81  }
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44

◆ onAuthenticationFailure()

boolean org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.onAuthenticationFailure ( LDAPObject  ldapUser,
UserModel  user,
AuthenticationException  ldapException,
RealmModel  realm 
)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

119  {
120  String exceptionMessage = ldapException.getMessage();
121  Matcher m = AUTH_EXCEPTION_REGEX.matcher(exceptionMessage);
122  if (m.matches()) {
123  String errorCode = m.group(1);
124  return processAuthErrorCode(errorCode, user);
125  } else {
126  return false;
127  }
128  }
boolean processAuthErrorCode(String errorCode, UserModel user)
Definition: MSADLDSUserAccountControlStorageMapper.java:130
static final Pattern AUTH_EXCEPTION_REGEX
Definition: MSADLDSUserAccountControlStorageMapper.java:54

◆ onImportUserFromLDAP()

void org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.onImportUserFromLDAP ( LDAPObject  ldapUser,
UserModel  user,
RealmModel  realm,
boolean  isCreate 
)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

114  {
115 
116  }

◆ onRegisterUserToLDAP()

void org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.onRegisterUserToLDAP ( LDAPObject  ldapUser,
UserModel  localUser,
RealmModel  realm 
)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

109  {
110 
111  }

◆ parseBooleanParameter()

static boolean org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.parseBooleanParameter ( ComponentModel  mapperModel,
String  paramName 
)
inlinestaticinherited
73  {
74  String paramm = mapperModel.getConfig().getFirst(paramName);
75  return Boolean.parseBoolean(paramm);
76  }
final ComponentModel mapperModel
Definition: AbstractLDAPStorageMapper.java:43
V getFirst(K key)
Definition: MultivaluedHashMap.java:86
MultivaluedHashMap< String, String > getConfig()
Definition: ComponentModel.java:71

◆ passwordUpdated()

void org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.passwordUpdated ( UserModel  user,
LDAPObject  ldapUser,
PasswordUserCredentialModel  password 
)
inline

org.keycloak.storage.ldap.mappers.PasswordUpdateCallbackを実装しています。

81  {
82  logger.debugf("Going to update pwdLastSet for ldap user '%s' after successful password update", ldapUser.getDn().toString());
83 
84  // Normally it's read-only
85  ldapUser.removeReadOnlyAttributeName(LDAPConstants.PWD_LAST_SET);
86 
87  ldapUser.setSingleAttribute(LDAPConstants.PWD_LAST_SET, "-1");
88 
89  if (user.isEnabled()) {
90  // TODO: Use removeAttribute once available
91  ldapUser.setSingleAttribute(LDAPConstants.MSDS_USER_ACCOUNT_DISABLED, "FALSE");
92  logger.debugf("Removing msDS-UserPasswordExpired of user '%s'", ldapUser.getDn().toString());
93  }
94 
96  }
LDAPIdentityStore getLdapIdentityStore()
Definition: LDAPStorageProvider.java:126
void update(LDAPObject ldapObject)
Definition: LDAPIdentityStore.java:105
static final Logger logger
Definition: MSADLDSUserAccountControlStorageMapper.java:52
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44

◆ passwordUpdateFailed()

void org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.passwordUpdateFailed ( UserModel  user,
LDAPObject  ldapUser,
PasswordUserCredentialModel  password,
ModelException  exception 
)
inline

org.keycloak.storage.ldap.mappers.PasswordUpdateCallbackを実装しています。

99  {
100  throw processFailedPasswordUpdateException(exception);
101  }
ModelException processFailedPasswordUpdateException(ModelException e)
Definition: MSADLDSUserAccountControlStorageMapper.java:155

◆ processAuthErrorCode()

boolean org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.processAuthErrorCode ( String  errorCode,
UserModel  user 
)
inlineprotected
130  {
131  logger.debugf("MSAD LDS Error code is '%s' after failed LDAP login of user '%s'", errorCode, user.getUsername());
132 
133  if (ldapProvider.getEditMode() == UserStorageProvider.EditMode.WRITABLE) {
134  if (errorCode.equals("532") || errorCode.equals("773")) {
135  // User needs to change his MSAD password. Allow him to login, but add UPDATE_PASSWORD required action
136  if (!user.getRequiredActions().contains(UserModel.RequiredAction.UPDATE_PASSWORD.name())) {
137  user.addRequiredAction(UserModel.RequiredAction.UPDATE_PASSWORD);
138  }
139  return true;
140  } else if (errorCode.equals("533")) {
141  // User is disabled in MSAD LDS. Set him to disabled in KC as well
142  if (user.isEnabled()) {
143  user.setEnabled(false);
144  }
145  return true;
146  } else if (errorCode.equals("775")) {
147  logger.warnf("Locked user '%s' attempt to login", user.getUsername());
148  }
149  }
150 
151  return false;
152  }
static final Logger logger
Definition: MSADLDSUserAccountControlStorageMapper.java:52
EditMode getEditMode()
Definition: LDAPStorageProvider.java:130
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
WRITABLE
Definition: UserStorageProvider.java:80

◆ processFailedPasswordUpdateException()

ModelException org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.processFailedPasswordUpdateException ( ModelException  e)
inlineprotected
155  {
156  if (e.getCause() == null || e.getCause().getMessage() == null) {
157  return e;
158  }
159 
160  String exceptionMessage = e.getCause().getMessage();
161  Matcher m = AUTH_INVALID_NEW_PASSWORD.matcher(exceptionMessage);
162  if (m.matches()) {
163  ModelException me = new ModelException("invalidPasswordRegexPatternMessage", e);
164  me.setParameters(new Object[]{"passwordConstraintViolation"});
165  return me;
166  }
167 
168  return e;
169  }
static final Pattern AUTH_INVALID_NEW_PASSWORD
Definition: MSADLDSUserAccountControlStorageMapper.java:55

◆ proxy()

UserModel org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.proxy ( LDAPObject  ldapUser,
UserModel  delegate,
RealmModel  realm 
)
inline

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

104  {
105  return new MSADUserModelDelegate(delegate, ldapUser);
106  }

◆ syncDataFromFederationProviderToKeycloak()

SynchronizationResult org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.syncDataFromFederationProviderToKeycloak ( RealmModel  realm)
inlineinherited

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

53  {
54  return new SynchronizationResult();
55  }

◆ syncDataFromKeycloakToFederationProvider()

SynchronizationResult org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.syncDataFromKeycloakToFederationProvider ( RealmModel  realm)
inlineinherited

org.keycloak.storage.ldap.mappers.LDAPStorageMapperを実装しています。

58  {
59  return new SynchronizationResult();
60  }

メンバ詳解

◆ AUTH_EXCEPTION_REGEX

final Pattern org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.AUTH_EXCEPTION_REGEX = Pattern.compile(".*AcceptSecurityContext error, data ([0-9a-f]*), v.*")
staticprivate

◆ AUTH_INVALID_NEW_PASSWORD

final Pattern org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.AUTH_INVALID_NEW_PASSWORD = Pattern.compile("(?s).*problem 1005 \\(CONSTRAINT_ATT_TYPE\\), data [0-9a-f]*, Att 23 \\(userPassword\\).*")
staticprivate

◆ ldapProvider

final LDAPStorageProvider org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.ldapProvider
protectedinherited

◆ logger

final Logger org.keycloak.storage.ldap.mappers.msadlds.MSADLDSUserAccountControlStorageMapper.logger = Logger.getLogger(MSADLDSUserAccountControlStorageMapper.class)
staticprivate

◆ mapperModel

final ComponentModel org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.mapperModel
protectedinherited

◆ session

final KeycloakSession org.keycloak.storage.ldap.mappers.AbstractLDAPStorageMapper.session
protectedinherited

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