Class BlacklistPasswordPolicyProviderFactory
- java.lang.Object
-
- org.keycloak.policy.BlacklistPasswordPolicyProviderFactory
-
- All Implemented Interfaces:
PasswordPolicyProviderFactory,ProviderFactory<PasswordPolicyProvider>
public class BlacklistPasswordPolicyProviderFactory extends Object implements PasswordPolicyProviderFactory
CreatesBlacklistPasswordPolicyProviderinstances.Password blacklists are simple text files where every line is a blacklisted password delimited by a newline character
\n.Blacklists can be configured via the Authentication: Password Policy section in the admin-console. A blacklist-file is referred to by its name in the policy configuration.
Blacklist location
Users can provide custom blacklists by adding a blacklist password file to the configured blacklist folder.
The location of the password-blacklists folder is derived as follows
- the value of the System property
keycloak.password.blacklists.pathif configured - fails if folder is missing - the value of the SPI config property:
blacklistsPathwhen explicitly configured - fails if folder is missing - otherwise
$KC_HOME/data/password-blacklists/if nothing else is configured
--spi-password-policy-password-blacklist-blacklists-path=/path/to/blacklistsFolderNote that the preferred way for configuration is to copy the password file to the
$KC_HOME/data/password-blacklists/folderA password blacklist with the filename
10_million_passwords.txtthat is located beneath$KC_HOME/data/keycloak/blacklists/can be referred to as10_million_passwords.txtin the Authentication: Password Policy configuration.False positives
The current implementation uses a probabilistic data-structure called
BloomFilterwhich allows for fast and memory efficient containment checks, e.g. whether a given password is contained in a blacklist, with the possibility for false positives. By default a false positive probabilityDEFAULT_FALSE_POSITIVE_PROBABILITYis used. To change the false positive probability via CLI configuration use--spi-password-policy-password-blacklist-false-positive-probability=0.00001- Author:
- Thomas Darimont
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classBlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklistABlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklistuses password-blacklist files as to construct aBlacklistPasswordPolicyProviderFactory.PasswordBlacklist.static interfaceBlacklistPasswordPolicyProviderFactory.PasswordBlacklistABlacklistPasswordPolicyProviderFactory.PasswordBlacklistdescribes a list of too easy to guess or potentially leaked passwords that users should not be able to use.
-
Field Summary
Fields Modifier and Type Field Description static StringBLACKLISTS_FALSE_POSITIVE_PROBABILITY_PROPERTYstatic StringBLACKLISTS_PATH_PROPERTYstatic doubleDEFAULT_FALSE_POSITIVE_PROBABILITYstatic StringIDstatic StringJBOSS_SERVER_DATA_DIRstatic StringPASSWORD_BLACKLISTS_FOLDERstatic StringSYSTEM_PROPERTY
-
Constructor Summary
Constructors Constructor Description BlacklistPasswordPolicyProviderFactory()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()This is called when the server shuts down.PasswordPolicyProvidercreate(KeycloakSession session)StringgetConfigType()StringgetDefaultBlacklistsBasePath()Method to obtain the default location for the list folder.StringgetDefaultConfigValue()StringgetDisplayName()protected doublegetFalsePositiveProbability()StringgetId()voidinit(Config.Scope config)Only called once when the factory is first created.booleanisMultiplSupported()voidpostInit(KeycloakSessionFactory factory)Called after all provider factories have been initializedBlacklistPasswordPolicyProviderFactory.PasswordBlacklistresolvePasswordBlacklist(String blacklistName)Resolves and potentially registers aBlacklistPasswordPolicyProviderFactory.PasswordBlacklistfor the givenblacklistName.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.keycloak.provider.ProviderFactory
getConfigMetadata, order
-
-
-
-
Field Detail
-
ID
public static final String ID
- See Also:
- Constant Field Values
-
SYSTEM_PROPERTY
public static final String SYSTEM_PROPERTY
- See Also:
- Constant Field Values
-
BLACKLISTS_PATH_PROPERTY
public static final String BLACKLISTS_PATH_PROPERTY
- See Also:
- Constant Field Values
-
BLACKLISTS_FALSE_POSITIVE_PROBABILITY_PROPERTY
public static final String BLACKLISTS_FALSE_POSITIVE_PROBABILITY_PROPERTY
- See Also:
- Constant Field Values
-
DEFAULT_FALSE_POSITIVE_PROBABILITY
public static final double DEFAULT_FALSE_POSITIVE_PROBABILITY
- See Also:
- Constant Field Values
-
JBOSS_SERVER_DATA_DIR
public static final String JBOSS_SERVER_DATA_DIR
- See Also:
- Constant Field Values
-
PASSWORD_BLACKLISTS_FOLDER
public static final String PASSWORD_BLACKLISTS_FOLDER
-
-
Method Detail
-
create
public PasswordPolicyProvider create(KeycloakSession session)
- Specified by:
createin interfaceProviderFactory<PasswordPolicyProvider>
-
init
public void init(Config.Scope config)
Description copied from interface:ProviderFactoryOnly called once when the factory is first created. This config is pulled from keycloak_server.json- Specified by:
initin interfaceProviderFactory<PasswordPolicyProvider>
-
postInit
public void postInit(KeycloakSessionFactory factory)
Description copied from interface:ProviderFactoryCalled after all provider factories have been initialized- Specified by:
postInitin interfaceProviderFactory<PasswordPolicyProvider>
-
close
public void close()
Description copied from interface:ProviderFactoryThis is called when the server shuts down.- Specified by:
closein interfaceProviderFactory<PasswordPolicyProvider>
-
getDisplayName
public String getDisplayName()
- Specified by:
getDisplayNamein interfacePasswordPolicyProviderFactory
-
getConfigType
public String getConfigType()
- Specified by:
getConfigTypein interfacePasswordPolicyProviderFactory
-
getDefaultConfigValue
public String getDefaultConfigValue()
- Specified by:
getDefaultConfigValuein interfacePasswordPolicyProviderFactory
-
isMultiplSupported
public boolean isMultiplSupported()
- Specified by:
isMultiplSupportedin interfacePasswordPolicyProviderFactory
-
getId
public String getId()
- Specified by:
getIdin interfaceProviderFactory<PasswordPolicyProvider>
-
getDefaultBlacklistsBasePath
public String getDefaultBlacklistsBasePath()
Method to obtain the default location for the list folder. The method will return the data directory of the Keycloak instance concatenated with /password-blacklists/.- Returns:
- The default path used by the provider to lookup the lists when no other configuration is in place.
-
resolvePasswordBlacklist
public BlacklistPasswordPolicyProviderFactory.PasswordBlacklist resolvePasswordBlacklist(String blacklistName)
Resolves and potentially registers aBlacklistPasswordPolicyProviderFactory.PasswordBlacklistfor the givenblacklistName.- Parameters:
blacklistName-- Returns:
-
getFalsePositiveProbability
protected double getFalsePositiveProbability()
-
-