Drupal est un CMS écrit en PHP. Il peut utiliser des modules externes pour étendre ses fonctionnalités. L'un de ses modules peut être utilisé pour déléger l'authentification serveur au serveur web : Webserver Auth.
Télécharger et installer le module Webserver Auth, en le décompressant dans le répertoire modules/.
Aller dans l'interface administration et activer le module Webserver Auth.
Configurer l'hôte virtuel Drupal comme n'importe quel autre hôte virtuel protégé.
<VirtualHost *:80> ServerName drupal.example.com PerlHeaderParserHandler Lemonldap::NG::Handler ... </VirtualHost>
server { listen 80; server_name drupal.example.com; root /path/to/application; # Requête interne d'authentification location = /lmauth { internal; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/llng-fastcgi-server/llng-fastcgi.sock; # Ignorer les données postées fastcgi_pass_request_body off; fastcgi_param CONTENT_LENGTH ""; # Conserver le nom d'hôte original fastcgi_param HOST $http_host; # Conserver la requête originale (le serveur LLNG va recevoir /llauth) fastcgi_param X_ORIGINAL_URI $request_uri; } # Requêtes clients location / { auth_request /lmauth; auth_request_set $lmremote_user $upstream_http_lm_remote_user; auth_request_set $lmlocation $upstream_http_location; error_page 401 $lmlocation; try_files $uri $uri/ =404; ... include /etc/lemonldap-ng/nginx-lua-headers.conf; } location / { try_files $uri $uri/ =404; } }
Aller dans le manager et créer un nouvel hôte virtuel pour Drupal.
Configurer simplement la règle d'accès.
Si LL::NG est utilisé par reverse-proxy, configurer l'en-tête Auth-User
, aucun autre en-tête n'est utile.
Avec la solution ci-dessus, tout le site Drupal sera protégé, ainsi aucun accès anonyme ne sera autorisé.
unprotect
car la navigation Drupal est basée sur des requêtes basées sur des attributs (?q=admin, ?q=user, etc.), et la règle unprotect ne fonctionne que sur des correspondances d'URL.
Vous pouvez créer un hôte virtuel particulier et utiliser le module rewrite d'Apache pour choisir entre le site ouvert et le protégé :
<VirtualHost *:80> ServerName drupal.example.com # DocumentRoot DocumentRoot /var/www/html/drupal/ DirectoryIndex index.php # Redirect admin pages RewriteEngine On RewriteCond %{QUERY_STRING} q=(admin|user) RewriteRule ^/(.*)$ http://admindrupal.example.com/$1 [R] LogLevel warn ErrorLog /var/log/httpd/drupal-error.log CustomLog /var/log/httpd/drupal-access.log combined </VirtualHost> <VirtualHost *:80> ServerName admindrupal.example.com # Protection SSO PerlHeaderParserHandler Lemonldap::NG::Handler # DocumentRoot DocumentRoot /var/www/html/drupal/ DirectoryIndex index.php LogLevel warn ErrorLog /var/log/httpd/admindrupal-error.log CustomLog /var/log/httpd/admindrupal-access.log combined </VirtualHost>