8.2.9.3. Configuration de apache shiro

8.2.9.3.1. Présentation authentification via LDAP et via certificat

Afin de pouvoir authentifier des clients via une base de données LDAP il suffit de bien configurer shiro. Pour ce faire, Vitam utilise le fichier shiro.ini qui a la forme suivante.

[main]
contextFactory = org.apache.shiro.realm.ldap.JndiLdapContextFactory
contextFactory.url = ldap://localhost:389
contextFactory.systemUsername = cn=admin,dc=example,dc=org
contextFactory.systemPassword = password
realm = fr.gouv.vitam.common.security.rest.LdapRealm
realm.ldapContextFactory = $contextFactory
realm.searchBase = "dc=example,dc=org"
realm.groupRequestFilter = (&(objectClass=groupOfNames)(member={0}))
realm.userDnTemplate = uid={0},dc=example,dc=org
realm.groupRolesMap = "cn=gadmins,dc=example,dc=org":"admin", "cn=gusers,dc=example,dc=org":"user", "cn=gadmins,dc=example,dc=org":"guest"
securityManager.realms = $realm
x509 = fr.gouv.vitam.common.auth.web.filter.X509AuthenticationFilter
x509.useHeader = false
x509credentialsMatcher = fr.gouv.vitam.common.auth.core.authc.X509CredentialsSha256Matcher
x509Realm = fr.gouv.vitam.common.auth.core.realm.X509KeystoreFileWithRoleRealm
x509Realm.grantedKeyStoreName = /vitam/conf/ihm-demo/grantedstore_ihm-demo.jks
x509Realm.grantedKeyStorePassphrase = azerty12
x509Realm.trustedKeyStoreName = /vitam/conf/ihm-demo/truststore_ihm-demo.jks
x509Realm.trustedKeyStorePassphrase = azerty10
x509Realm.credentialsMatcher = $x509credentialsMatcher
x509Realm.certificateDnRoleMapping = "CN=userAdmin,O=Vitam,L=Paris":"admin", "CN=userUser,O=Vitam,L=Paris,C=FR":"user"
securityManager.realms = $x509Realm

8.2.9.3.2. Décryptage de shiro.ini

[main] Contient la déclaration des options et mappings dans l’authentication ldap:

  • contextFactory.url : url du serveur ldap ;
  • contextFactory.systemUsername : identifiant de l’utilisateur ;
  • contextFactory.systemPassword : mot de passe ;
  • realm.searchBase : le domaine de recherche dans LDAP ;
  • realm.groupRequestFilter : chaque utilisateur est déclaré dans un groupe, cette requête sert à chercher les groupes de l’utilisateur ;
  • realm.userDnTemplate : le modèle pour traduire un identifiant de l’utilisateur en DN (distinguished name) dans ldap ;
  • realm.groupRolesMap : le mapping entre le DN des group de l’utilisateur et les rôles dans ihm ;
  • x509Realm.grantedKeyStoreName : le fichier grantedstore ;
  • x509Realm.trustedKeyStoreName : le fichier trustedstore ;
  • x509Realm.certificateDnRoleMapping : le mapping entre le DisplayName de certificat et les rôles dans ihm.

Note: on peut déclarer plusieurs groups qui ont la même rôle admin avec cette syntaxe :

"groupeA" : "admin", "groupeB" : "admin", "groupeC" : "admin"