Security module: (v5.0)
The pac4j-config module:
<dependency>
    <groupId>org.pac4j</groupId>
    <artifactId>pac4j-config</artifactId>
    <version>${pac4j.version}</version>
</dependency>
gathers all the pac4j facilities to define this Config object.
Currently, there is only one component which allows you to build the clients from a set of properties: the PropertiesConfigFactory.
pac4j-saml module if you want to use SAML, the pac4j-oauth module if you want to use OAuth...)Example (YAML dropwizard configuration file):
pac4j:
  callbackUrl: /callback
  clientsProperties:
    facebook.id: 145278422258960
    facebook.secret: be21409ba8f39b5dae2a7de525484da8
    saml.keystorePath: resource:samlKeystore.jks
    saml.keystorePassword: pac4j-demo-passwd
    saml.privateKeyPassword: pac4j-demo-passwd
    saml.identityProviderMetadataPath: resource:metadata-okta.xml
    saml.maximumAuthenticationLifetime: 3600
    saml.serviceProviderEntityId: http://localhost:8080/callback?client_name=SAML2Client
    saml.serviceProviderMetadataPath: sp-metadata.xml
    anonymous: fakevalue
    ldap.type: direct
    ldap.url: ldap://ldap.jumpcloud.com:389
    ldap.useStartTls: false
    ldap.dnFormat: uid=%s,ou=Users,o=58e69adc0914b437324e7632,dc=jumpcloud,dc=com
    ldap.usersDn: ou=Users,o=58e69adc0914b437324e7632,dc=jumpcloud,dc=com
    ldap.principalAttributeId: uid
    ldap.principalAttributes: firstName,lastName
    ldap.enhanceWithEntryResolver: false
    formClient.loginUrl: /login.html
    formClient.authenticator: ldap
Here are the properties you can use to define the clients (, authenticators and password encoders):
| Available properties | Usage | 
|---|---|
encoder.spring.type (bcrypt, noop, pbkdf2, scrypt or standard), encoder.spring.bcrypt.length, encoder.spring.pbkdf2.secret, encoder.spring.pbkdf2.iterations, encoder.spring.pbkdf2.hashWidth, encoder.spring.scrypt.cpuCost, encoder.spring.scrypt.memoryCost, encoder.spring.scrypt.parallelization, encoder.spring.scrypt.keyLength, encoder.spring.scrypt.saltLength and encoder.spring.standard.secret | 
      To define a SpringPasswordEncoder based on the provided properties and named encoder.spring or encoder.spring.N | 
    
encoder.shiro (if no specific properties are required), encoder.shiro.generatePublicSalt, encoder.shiro.hashAlgorithmName, encoder.shiro.hashIterations and encoder.shiro.privateSalt | 
      To define a ShiroPasswordEncoder based on the provided properties and named encoder.shiro or encoder.shiro.N | 
    
ldap.type, ldap.dnFormat, ldap.principalAttributes,ldap.principalAttributeId, ldap.principalAttributePassword, ldap.subtreeSearch, ldap.usersDn, ldap.userFilter, ldap.enhanceWithEntryResolver, ldap.trustCertificates, ldap.keystore, ldap.keystorePassword, ldap.keystoreType, ldap.minPoolSize, ldap.maxPoolSize, ldap.poolPassivator, ldap.validateOnCheckout, ldap.validatePeriodically, ldap.validatePeriod, ldap.failFast, ldap.idleTime, ldap.prunePeriod, ldap.blockWaitTime, ldap.url, ldap.useStartTls, ldap.connectTimeout, ldap.providerClass, ldap.allowMultipleDns, ldap.bindDn, ldap.bindCredential, ldap.saslRealm, ldap.saslMechanism, ldap.saslAuthorizationId, ldap.saslSecurityStrength and ldap.saslQualityOfProtection | 
      To define a LdapAuthenticator based on the provided properties and named ldap or ldap.N | 
    
db.dataSourceClassName, db.jdbcUrl, db.userAttributes, db.userIdAttribute, db.usernameAttribute, db.userPasswordAttribute, db.usersTable, db.username, db.password, db.autoCommit, db.connectionTimeout, db.idleTimeout, db.maxLifetime, db.connectionTestQuery, db.minimumIdle, db.maximumPoolSize, db.poolName, db.initializationFailTimeout, db.isolateInternalQueries, db.allowPoolSuspension, db.readOnly, db.registerMbeans, db.catalog, db.connectionInitSql, db.driverClassName, db.transactionIsolation, db.validationTimeout, db.leakDetectionThreshold, db.customParamKey, db.customParamValue, db.loginTimeout, db.dataSourceJndi and db.passwordEncoder | 
      To define a DbAuthenticator based on the provided properties and named db or db.N | 
    
rest.url | 
      To define a RestAuthenticator based on the provided properties and named rest or rest.N | 
    
anonymous | 
      To define the AnonymousClient, the value is ignored | 
    
directBasicAuth.authenticator | 
      To define a DirectBasicAuthClient based on the provided properties | 
    
saml.keystorePassword, saml.privateKeyPassword, saml.keystorePath, saml.identityProviderMetadataPath, saml.maximumAuthenticationLifetime, saml.serviceProviderEntityId, saml.serviceProviderMetadataPath, saml.destinationBindingType, saml.keystoreAlias | 
      To define a SAML2Client based on the provided properties | 
    
cas.loginUrl, cas.protocol | 
      To define a CasClient based on the provided properties | 
    
oidc.type (google or azure), oidc.azure.tenant (for the AzureAD tenant), oidc.id, oidc.secret, oidc.scope, oidc.discoveryUri, oidc.useNonce, oidc.preferredJwsAlgorithm, oidc.maxClockSkew, oidc.clientAuthenticationMethod, oidc.customParamKey1, oidc.customParamValue1, oidc.customParamKey2,oidc.customParamValue2 | 
      To define an OpenID connect client based on the provided properties | 
formClient.authenticator, formClient.loginUrl, formClient.usernameParameter formClient.passwordParameter | 
      To define a FormClient based on the provided properties | 
    
indirectBasicAuth.authenticator, indirectBasicAuth.realName | 
      To define an IndirectBasicAuthClient based on the provided properties | 
    
facebook.id, facebook.secret, facebook.scope, facebook.fields | 
      To define a FacebookClient based on the provided properties | 
    
twitter.id, twitter.secret | 
      To define a TwitterClient based on the provided properties | 
    
github.id, github.secret | 
      To define a GitHubClient based on the provided properties | 
    
dropbox.id, dropbox.secret | 
      To define a DropBoxClient based on the provided properties | 
    
windowslive.id, windowslive.secret | 
      To define a WindowsLiveClient based on the provided properties | 
    
yahoo.id, yahoo.secret | 
      To define a YahooClient based on the provided properties | 
    
linkedin.id, linkedin.secret, linkedin.fields, linkedin.scope | 
      To define a LinkedIn2Client based on the provided properties | 
    
foursquare.id, foursquare.secret | 
      To define a FoursquareClient based on the provided properties | 
    
google.id, google.secret, google.scope | 
      To define a Google2Client based on the provided properties | 
    
oauth2.id, oauth2.secret, oauth2.authUrl, oauth2.tokenUrl, oauth2.profileUrl, oauth2.profilePath, oauth2.profileId, oauth2.scope, oauth2.withState, oauth2.clientAuthenticationMethod | 
      To define a GenericOAuth20Client based on the provided properties | 
    
Notice that:
- 
    
you can define multiple clients of the same type by adding a number at the end of the properties:
cas.loginUrl.2,oidc.type.5… - 
    
the
.passwordEncoderproperty must be set to the name of an already definedPasswordEncoderlikeencoder.springorencoder.shiro.3 - 
    
the
.authenticatorproperty must be set to the name of an already definedAuthenticatorlikeldapordb.1or the implicit values:testUsernamePasswordortestToken(for test authenticators).