keycloak
公開メンバ関数 | 関数 | 非公開メンバ関数 | 静的非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist クラス
org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist の継承関係図
Inheritance graph
org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist 連携図
Collaboration graph

公開メンバ関数

 FileBasedPasswordBlacklist (Path blacklistBasePath, String name)
 
String getName ()
 
boolean contains (String password)
 

関数

void lazyInit ()
 

非公開メンバ関数

BloomFilter< String > load ()
 
long getPasswordCount () throws IOException
 

静的非公開メンバ関数

static BufferedReader newReader (Path path) throws IOException
 
static Path detectBlacklistsBasePath (Config.Scope config)
 
static Path ensureExists (Path path)
 

非公開変数類

final String name
 
final Path path
 
BloomFilter< String > blacklist
 

静的非公開変数類

static final double FALSE_POSITIVE_PROBABILITY = 0.01
 
static final int BUFFER_SIZE_IN_BYTES = 512 * 1024
 

詳解

A FileBasedPasswordBlacklist uses password-blacklist files as to construct a PasswordBlacklist.

This implementation uses a dynamically sized BloomFilter to provide a false positive probability of 1%.

参照
BloomFilter

構築子と解体子

◆ FileBasedPasswordBlacklist()

org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.FileBasedPasswordBlacklist ( Path  blacklistBasePath,
String  name 
)
inline
209  {
210 
211  this.name = name;
212  this.path = blacklistBasePath.resolve(name);
213 
214 
215  if (name.contains("/")) {
216  // disallow '/' to avoid accidental filesystem traversal
217  throw new IllegalArgumentException("" + name + " must not contain slashes!");
218  }
219 
220  if (!Files.exists(this.path)) {
221  throw new IllegalArgumentException("Password blacklist " + name + " not found!");
222  }
223  }
final Path path
Definition: BlacklistPasswordPolicyProviderFactory.java:202
final String name
Definition: BlacklistPasswordPolicyProviderFactory.java:197

関数詳解

◆ contains()

boolean org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.contains ( String  password)
inline

org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.PasswordBlacklistを実装しています。

229  {
230  return blacklist != null && blacklist.mightContain(password);
231  }
BloomFilter< String > blacklist
Definition: BlacklistPasswordPolicyProviderFactory.java:207

◆ detectBlacklistsBasePath()

static Path org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.detectBlacklistsBasePath ( Config.Scope  config)
inlinestaticprivate

Discovers password blacklists location.

  1. system property
    keycloak.password.blacklists.path
    if present
  2. SPI config property
    blacklistsPath

and fallback to the

/data/password-blacklists

folder of the currently running wildfly instance.

引数
config
戻り値
the detected blacklist path
例外
IllegalStateExceptionif no blacklist folder could be detected
308  {
309 
310  String pathFromSysProperty = System.getProperty(SYSTEM_PROPERTY);
311  if (pathFromSysProperty != null) {
312  return ensureExists(Paths.get(pathFromSysProperty));
313  }
314 
315  String pathFromSpiConfig = config.get(BLACKLISTS_PATH_PROPERTY);
316  if (pathFromSpiConfig != null) {
317  return ensureExists(Paths.get(pathFromSpiConfig));
318  }
319 
320  String pathFromJbossDataPath = System.getProperty(JBOSS_SERVER_DATA_DIR) + "/" + PASSWORD_BLACKLISTS_FOLDER;
321  if (!Files.exists(Paths.get(pathFromJbossDataPath))) {
322  if (!Paths.get(pathFromJbossDataPath).toFile().mkdirs()) {
323  LOG.errorf("Could not create folder for password blacklists: %s", pathFromJbossDataPath);
324  }
325  }
326  return ensureExists(Paths.get(pathFromJbossDataPath));
327  }
static Path ensureExists(Path path)
Definition: BlacklistPasswordPolicyProviderFactory.java:329
static final Logger LOG
Definition: BlacklistPasswordPolicyProviderFactory.java:67
static final String JBOSS_SERVER_DATA_DIR
Definition: BlacklistPasswordPolicyProviderFactory.java:75
static final String PASSWORD_BLACKLISTS_FOLDER
Definition: BlacklistPasswordPolicyProviderFactory.java:77
static final String BLACKLISTS_PATH_PROPERTY
Definition: BlacklistPasswordPolicyProviderFactory.java:73
Config.Scope config
Definition: BlacklistPasswordPolicyProviderFactory.java:83
static final String SYSTEM_PROPERTY
Definition: BlacklistPasswordPolicyProviderFactory.java:71

◆ ensureExists()

static Path org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.ensureExists ( Path  path)
inlinestaticprivate
329  {
330 
331  Objects.requireNonNull(path, "path");
332 
333  if (Files.exists(path)) {
334  return path;
335  }
336 
337  throw new IllegalStateException("Password blacklists location does not exist: " + path);
338  }
final Path path
Definition: BlacklistPasswordPolicyProviderFactory.java:202

◆ getName()

String org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.getName ( )
inline

org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.PasswordBlacklistを実装しています。

225  {
226  return name;
227  }
final String name
Definition: BlacklistPasswordPolicyProviderFactory.java:197

◆ getPasswordCount()

long org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.getPasswordCount ( ) throws IOException
inlineprivate

Determines password blacklist size to correctly size the BloomFilter backing this blacklist.

戻り値
例外
IOException
277  {
278 
279  /*
280  * TODO find a more efficient way to determine the password count,
281  * e.g. require a header-line in the password-blacklist file
282  */
283  try (BufferedReader br = newReader(path)) {
284  return br.lines().count();
285  }
286  }
final Path path
Definition: BlacklistPasswordPolicyProviderFactory.java:202
static BufferedReader newReader(Path path)
Definition: BlacklistPasswordPolicyProviderFactory.java:288

◆ lazyInit()

void org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.lazyInit ( )
inlinepackage
233  {
234 
235  if (blacklist != null) {
236  return;
237  }
238 
239  this.blacklist = load();
240  }
BloomFilter< String > load()
Definition: BlacklistPasswordPolicyProviderFactory.java:247
BloomFilter< String > blacklist
Definition: BlacklistPasswordPolicyProviderFactory.java:207

◆ load()

BloomFilter<String> org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.load ( )
inlineprivate

Loads the referenced blacklist into a BloomFilter.

戻り値
the BloomFilter backing a password blacklist
247  {
248 
249  try {
250  LOG.infof("Loading blacklist with name %s from %s - start", name, path);
251 
252  long passwordCount = getPasswordCount();
253 
254  BloomFilter<String> filter = BloomFilter.create(
255  Funnels.stringFunnel(StandardCharsets.UTF_8),
256  passwordCount,
258 
259  try (BufferedReader br = newReader(path)) {
260  br.lines().forEach(filter::put);
261  }
262 
263  LOG.infof("Loading blacklist with name %s from %s - end", name, path);
264 
265  return filter;
266  } catch (IOException e) {
267  throw new RuntimeException("Could not load password blacklist from path: " + path, e);
268  }
269  }
long getPasswordCount()
Definition: BlacklistPasswordPolicyProviderFactory.java:277
static final Logger LOG
Definition: BlacklistPasswordPolicyProviderFactory.java:67
final Path path
Definition: BlacklistPasswordPolicyProviderFactory.java:202
static BufferedReader newReader(Path path)
Definition: BlacklistPasswordPolicyProviderFactory.java:288
static final double FALSE_POSITIVE_PROBABILITY
Definition: BlacklistPasswordPolicyProviderFactory.java:190
final String name
Definition: BlacklistPasswordPolicyProviderFactory.java:197

◆ newReader()

static BufferedReader org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.newReader ( Path  path) throws IOException
inlinestaticprivate
288  {
289  return new BufferedReader(Files.newBufferedReader(path), BUFFER_SIZE_IN_BYTES);
290  }
final Path path
Definition: BlacklistPasswordPolicyProviderFactory.java:202
static final int BUFFER_SIZE_IN_BYTES
Definition: BlacklistPasswordPolicyProviderFactory.java:192

メンバ詳解

◆ blacklist

BloomFilter<String> org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.blacklist
private

Initialized lazily via lazyInit()

◆ BUFFER_SIZE_IN_BYTES

final int org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.BUFFER_SIZE_IN_BYTES = 512 * 1024
staticprivate

◆ FALSE_POSITIVE_PROBABILITY

final double org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.FALSE_POSITIVE_PROBABILITY = 0.01
staticprivate

◆ name

final String org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.name
private

The name of the blacklist filename.

◆ path

final Path org.keycloak.policy.BlacklistPasswordPolicyProviderFactory.FileBasedPasswordBlacklist.path
private

The concrete path to the password-blacklist file.


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