3103e0fd0a
* KEYCLOAK-5244 Add BlacklistPasswordPolicyProvider This introduces a new PasswordPolicy which can refer to a named predefined password-blacklist to avoid users choosing too easy to guess passwords. The BlacklistPasswordPolicyProvider supports built-in as well as custom blacklists. built-in blacklists use the form `default/filename` and custom ones `custom/filename`, where filename is the name of the found blacklist-filename. I'd propose to use some of the freely available password blacklists from the [SecLists](https://github.com/danielmiessler/SecLists/tree/master/Passwords) project. For testing purposes one can download the password blacklist ``` wget -O 10_million_password_list_top_1000000.txt https://github.com/danielmiessler/SecLists/blob/master/Passwords/10_million_password_list_top_1000000.txt?raw=true ``` to /data/keycloak/blacklists/ Custom password policies can be configured with the SPI configuration mechanism via jboss-cli: ``` /subsystem=keycloak-server/spi=password-policy:add() /subsystem=keycloak-server/spi=password-policy/provider=passwordBlacklist:add(enabled=true) /subsystem=keycloak-server/spi=password-policy/provider=passwordBlacklist:write-attribute(name=properties.blacklistsFolderUri, value=file:///data/keycloak/blacklists/) ``` Password blacklist is stored in a TreeSet. * KEYCLOAK-5244 Encode PasswordBlacklist as a BloomFilter We now use a dynamically sized BloomFilter with a false positive probability of 1% as a backing store for PasswordBlacklists. BloomFilter implementation is provided by google-guava which is available in wildfly. Password blacklist files are now resolved against the ${jboss.server.data.dir}/password-blacklists. This can be overridden via system property, or SPI config. See JavaDoc of BlacklistPasswordPolicyProviderFactory for details. Revised implementation to be more extensible, e.g. it could be possible to use other stores like databases etc. Moved FileSystem specific methods to FileBasesPasswordBlacklistPolicy. The PasswordBlacklistProvider uses the guava version 20.0 shipped with wildfly. Unfortunately the arquillian testsuite transitively depends on guava 23.0 via the selenium-3.5.1 dependency. Hence we need to use version 23.0 for tests but 20.0 for the policy provider to avoid NoClassDefFoundErrors in the server-dist. Configure password blacklist folder for tests * KEYCLOAK-5244 Configure jboss.server.data.dir for test servers * KEYCLOAK-5244 Translate blacklisted message in base/login
215 lines
8.9 KiB
XML
215 lines
8.9 KiB
XML
<?xml version="1.0"?>
|
|
<!--
|
|
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
~ and other contributors as indicated by the @author tags.
|
|
~
|
|
~ Licensed under the Apache License, Version 2.0 (the "License");
|
|
~ you may not use this file except in compliance with the License.
|
|
~ You may obtain a copy of the License at
|
|
~
|
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
|
~
|
|
~ Unless required by applicable law or agreed to in writing, software
|
|
~ distributed under the License is distributed on an "AS IS" BASIS,
|
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
~ See the License for the specific language governing permissions and
|
|
~ limitations under the License.
|
|
-->
|
|
|
|
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
|
|
<modelVersion>4.0.0</modelVersion>
|
|
|
|
<parent>
|
|
<groupId>org.keycloak</groupId>
|
|
<artifactId>keycloak-testsuite-pom</artifactId>
|
|
<version>3.4.0.CR1-SNAPSHOT</version>
|
|
<relativePath>../pom.xml</relativePath>
|
|
</parent>
|
|
|
|
<groupId>org.keycloak.testsuite</groupId>
|
|
<artifactId>integration-arquillian</artifactId>
|
|
<packaging>pom</packaging>
|
|
|
|
<name>Keycloak Arquillian Integration TestSuite</name>
|
|
|
|
<properties>
|
|
|
|
<containers.home>${project.build.directory}/containers</containers.home>
|
|
<auth.server.java.home>${java.home}</auth.server.java.home>
|
|
<app.server.java.home>${java.home}</app.server.java.home>
|
|
|
|
<!--component versions-->
|
|
<arquillian-core.version>1.1.13.Final</arquillian-core.version>
|
|
<selenium.version>3.5.3</selenium.version>
|
|
<arquillian-drone.version>2.4.2</arquillian-drone.version>
|
|
<arquillian-graphene.version>2.3.1</arquillian-graphene.version>
|
|
<arquillian-wildfly-container.version>2.1.0.Final</arquillian-wildfly-container.version>
|
|
<arquillian-wls-container.version>1.0.1.Final</arquillian-wls-container.version>
|
|
<arquillian-infinispan-container.version>1.2.0.Beta2</arquillian-infinispan-container.version>
|
|
<version.shrinkwrap.resolvers>2.2.6</version.shrinkwrap.resolvers>
|
|
<undertow-embedded.version>1.0.0.Alpha2</undertow-embedded.version>
|
|
<version.org.wildfly.extras.creaper>1.6.1</version.org.wildfly.extras.creaper>
|
|
|
|
<!--migration properties-->
|
|
<migration.70.version>1.9.8.Final</migration.70.version>
|
|
<migration.70.authz.version>2.2.1.Final</migration.70.authz.version>
|
|
<migration.71.version>2.5.5.Final</migration.71.version>
|
|
<google.guava.version>23.0</google.guava.version>
|
|
|
|
<maven.compiler.target>1.8</maven.compiler.target>
|
|
<maven.compiler.source>1.8</maven.compiler.source>
|
|
</properties>
|
|
|
|
<dependencyManagement>
|
|
<dependencies>
|
|
<dependency>
|
|
<groupId>org.jboss.arquillian.selenium</groupId>
|
|
<artifactId>selenium-bom</artifactId>
|
|
<version>${selenium.version}</version>
|
|
<type>pom</type>
|
|
<scope>import</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.jboss.arquillian</groupId>
|
|
<artifactId>arquillian-bom</artifactId>
|
|
<version>${arquillian-core.version}</version>
|
|
<type>pom</type>
|
|
<scope>import</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.jboss.shrinkwrap.resolver</groupId>
|
|
<artifactId>shrinkwrap-resolver-impl-maven</artifactId>
|
|
<version>${version.shrinkwrap.resolvers}</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.jboss.arquillian.extension</groupId>
|
|
<artifactId>arquillian-drone-bom</artifactId>
|
|
<version>${arquillian-drone.version}</version>
|
|
<type>pom</type>
|
|
<scope>import</scope>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.infinispan.arquillian.container</groupId>
|
|
<artifactId>infinispan-arquillian-impl</artifactId>
|
|
<version>${arquillian-infinispan-container.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.wildfly.arquillian</groupId>
|
|
<artifactId>wildfly-arquillian-container-managed</artifactId>
|
|
<version>${arquillian-wildfly-container.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.wildfly.arquillian</groupId>
|
|
<artifactId>wildfly-arquillian-container-remote</artifactId>
|
|
<version>${arquillian-wildfly-container.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.wildfly.arquillian</groupId>
|
|
<artifactId>wildfly-arquillian-container-domain-managed</artifactId>
|
|
<version>${arquillian-wildfly-container.version}</version>
|
|
</dependency>
|
|
<dependency>
|
|
<groupId>org.jboss.arquillian.container</groupId>
|
|
<artifactId>arquillian-wls-remote-12.1.x</artifactId>
|
|
<version>${arquillian-wls-container.version}</version>
|
|
<scope>test</scope>
|
|
</dependency>
|
|
</dependencies>
|
|
</dependencyManagement>
|
|
|
|
<build>
|
|
<pluginManagement>
|
|
<plugins>
|
|
<plugin>
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
<version>2.19.1</version>
|
|
<configuration>
|
|
<failIfNoTests>false</failIfNoTests>
|
|
</configuration>
|
|
</plugin>
|
|
<plugin>
|
|
<groupId>org.codehaus.mojo</groupId>
|
|
<artifactId>xml-maven-plugin</artifactId>
|
|
<version>1.0.1</version>
|
|
</plugin>
|
|
<plugin>
|
|
<artifactId>maven-resources-plugin</artifactId>
|
|
<version>3.0.0</version>
|
|
</plugin>
|
|
</plugins>
|
|
</pluginManagement>
|
|
</build>
|
|
|
|
<modules>
|
|
<module>test-apps</module>
|
|
<module>servers</module>
|
|
<module>tests</module>
|
|
</modules>
|
|
|
|
<profiles>
|
|
<profile>
|
|
<id>test-70-migration</id>
|
|
<properties>
|
|
<migrated.auth.server.version>${migration.70.version}</migrated.auth.server.version>
|
|
</properties>
|
|
<build>
|
|
<pluginManagement>
|
|
<plugins>
|
|
<plugin>
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
<configuration>
|
|
<systemPropertyVariables>
|
|
<migrated.auth.server.version>${migrated.auth.server.version}</migrated.auth.server.version>
|
|
</systemPropertyVariables>
|
|
</configuration>
|
|
</plugin>
|
|
</plugins>
|
|
</pluginManagement>
|
|
</build>
|
|
</profile>
|
|
<profile>
|
|
<id>test-70-authz-migration</id>
|
|
<properties>
|
|
<migrated.auth.server.version>${migration.70.authz.version}</migrated.auth.server.version>
|
|
</properties>
|
|
<build>
|
|
<pluginManagement>
|
|
<plugins>
|
|
<plugin>
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
<configuration>
|
|
<systemPropertyVariables>
|
|
<migrated.auth.server.version>${migrated.auth.server.version}</migrated.auth.server.version>
|
|
</systemPropertyVariables>
|
|
</configuration>
|
|
</plugin>
|
|
</plugins>
|
|
</pluginManagement>
|
|
</build>
|
|
</profile>
|
|
<profile>
|
|
<id>test-71-migration</id>
|
|
<properties>
|
|
<migrated.auth.server.version>${migration.71.version}</migrated.auth.server.version>
|
|
</properties>
|
|
<build>
|
|
<pluginManagement>
|
|
<plugins>
|
|
<plugin>
|
|
<artifactId>maven-surefire-plugin</artifactId>
|
|
<configuration>
|
|
<systemPropertyVariables>
|
|
<migrated.auth.server.version>${migrated.auth.server.version}</migrated.auth.server.version>
|
|
</systemPropertyVariables>
|
|
</configuration>
|
|
</plugin>
|
|
</plugins>
|
|
</pluginManagement>
|
|
</build>
|
|
</profile>
|
|
</profiles>
|
|
|
|
</project>
|