Accès par authentification sous Apache avec base de donnée

lynow Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -

Bonjour,

J'ai mis en place un accès sur une liste de répertoire sous Apache. Cela permet de récupérer des fichiers JSON et de les intégrer dans des outils adaptés.

Pour accéder à un répertoire sur le net, il faut déjà être sur la liste blanche, mais en plus il faut avoir les identifiants. J'ai mis en place une authentification basique avec utilisateur et mot de passe.

J'ai donc, dans la configuration Apache du "site", les lignes suivantes :

<VirtualHost *:443>
        ServerAdmin ***@***
        ServerName serveur_name
        DocumentRoot /var/www/serveur_name/html/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # WHITELIST

        # Block all access to server root
        <Directory "/var/www/serveur_name/html/">
          Require all denied
        </Directory>

        # Allow white list IPs for repertory 1
        <Directory "/var/www/serveur_name/html/repertory_1">
          Require all denied
          Require ip @IP
        </Directory>

        # Authentication with database    

         DBDriver mysql
         DBDParams "dbname=site_db user=debian pass=@mdp"

         DBDMin 4
         DBDKeep 8
         DBDMax 20
         DBDExptime 300

         <Directory "/var/www/serveur_name/html/*">

          AuthType Basic
          AuthName "Auth_name"
          AuthDigestNonceLifetime 10
          AuthBasicProvider socache dbd
          AuthnCacheProvideFor dbd
          AuthnCacheContext my-server
          Require valid-user
          AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s"
         </Directory>
</VirtualHost>

Cela fonctionne, ok, pas de problèmes.

Cependant, si je veux ajouter d'autres accès répertoires correspondants à autres types d'accès (donc dédié à d'autres personnes), je suis obligé de créer une autre base de donnée et dupliquer les lignes dans le fichier de configuration afin de paramétrer, pour chaque "Directory", la vérification avec la base de donnée associée.

Soit j'oublie un détail, soit ma technique n'est pas adaptée, est-il possible d'avoir de l'aide sur ceci ?

Lynow.

A voir également:

1 réponse

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

Bonjour

Ne pourrais-tu pas simplement ajouter une colonne dans ta table qui permettrait de savoir dans quel répertoire ils ont accès puis, dans ta configuration Apache, dans la requête, ajouter une condition sur ce critère


0
lynow Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour, merci pour ta réponse.

En effet, c'est une possibilité, cela voudrait dire que mon fichier de configuration ressemblerait à ceci :

<VirtualHost *:443>
        ServerAdmin ***@***
        ServerName serveur_name
        DocumentRoot /var/www/serveur_name/html/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # WHITELIST

        # Block all access to server root
        <Directory "/var/www/serveur_name/html/">
          Require all denied
        </Directory>

        # Allow white list IPs for repertory 1
        <Directory "/var/www/serveur_name/html/repertory_1">
          Require all denied
          Require ip @IP
        </Directory>

        # Authentication with database    

         DBDriver mysql
         DBDParams "dbname=site_db user=debian pass=@mdp"

         DBDMin 4
         DBDKeep 8
         DBDMax 20
         DBDExptime 300

         <Directory "/var/www/serveur_name/html/*">
          AuthType Basic
          AuthName "Auth_name"
          AuthDigestNonceLifetime 10
          AuthBasicProvider socache dbd
          AuthnCacheProvideFor dbd
          AuthnCacheContext my-server
          Require valid-user
         </Directory>

         <Directory "/var/www/serveur_name/html/repertory_1">
          AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s AND groups = repertory_1"
         </Directory>

         <Directory "/var/www/serveur_name/html/repertory_2">
          AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s AND groups = repertory_2"
         </Directory>

</VirtualHost>

?

0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > lynow Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 

Oui

1