.. _exploitihmdemo:

Configuration de apache shiro
###############################

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.

.. code-block:: ini

    [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


.. code-block:: ini

    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


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 :

.. code-block:: ini

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


