10 votes

obtenir l'utilisateur authentifié sous apache

J'utilise Apache 2.2 sous Windows avec mod_auth_sspi et mod_headers. J'essaie de transmettre l'utilisateur authentifié actuel à la cible du proxy dans l'en-tête X-Remote-User.

Je pense que c'est simple, mais cela fait maintenant une heure que je me débats avec Apache et je n'arrive pas à trouver la sauce secrète dans la documentation ou sur Google.

Ma configuration est la suivante. Elle authentifie correctement l'utilisateur avec Active Directory, puis transmet la requête au serveur situé derrière. Cependant, l'en-tête X-Remote-User n'est pas ajouté. Il semble que la variable d'environnement REMOTE_USER n'existe pas. AUTH_USER non plus.

Je sais que le nom d'utilisateur authentifié est disponible quelque part, mais comment l'obtenir ?

ProxyRequests off
ProxyPass /clsoap/ http://127.0.0.1:12001/clsoap/

<Location /clsoap/>
    ProxyPassReverse /clsoap/

    AuthName "ADTest"
    AuthType SSPI
    SSPIAuth On
    SSPIAuthoritative On
    SSPIDomain primary.example.com
    SSPIUsernameCase lower
    SSPIOfferBasic Off
    Require valid-user

    RequestHeader set X-Remote-User "%{REMOTE_USER}e" env=REMOTE_USER
    RequestHeader set X-Auth-User "%{AUTH_USER}e" env=AUTH_USER
</Location>

7voto

Samyam Points 3695

Yay. Une autre session de google plus tard en essayant différents mots-clés aléatoires et j'ai trouvé ceci :

http://www.ruby-forum.com/topic/83067

http://old.nabble.com/Forcing-a-proxied-host-to-generate-REMOTE_USER-to2911573.html#a2914465

Cela fonctionne maintenant :

ProxyRequests off
ProxyPass /clsoap/ http://127.0.0.1:12001/clsoap/

<Location /clsoap/>
    ProxyPassReverse /clsoap/

    AuthName "ADTest"
    AuthType SSPI
    SSPIAuth On
    SSPIAuthoritative On
    SSPIDomain primary.example.com
    SSPIUsernameCase lower
    SSPIOfferBasic Off
    Require valid-user

    RewriteEngine On
    RewriteCond %{LA-U:REMOTE_USER} (.+)
    RewriteRule . - [E=RU:%1]
    RequestHeader set X-Remote-User "%{RU}e" env=RU
</Location>

0 votes

Cette règle de réécriture s'est heurtée aux problèmes d'imbrication décrits à l'adresse suivante fossplanet.com/f16/ . RewriteRule . - [E=RU:%1,NS] a corrigé le problème.

0 votes

@brofield en utilisant cette règle de réécriture vous obtiendrez SamAccountName. Mais comment obtenir UserPrincipalName ? Merci de votre compréhension.

4voto

Zack Points 31

Je sais qu'il s'agit d'un ancien message mais comme les utilisateurs rencontrent toujours ce problème, j'ai pensé ajouter qu'il y a un monde de différence entre les variables disponibles dans l'environnement ssl "%{VAR}s" et l'environnement non-ssl %{VAR}e.

J'ai découvert que pubcookie définissait l'utilisateur distant uniquement comme une variable d'environnement sécurisée que je pouvais transférer via ce qui suit :

    RequestHeader set X-REMOTE-USER %{REMOTE_USER}s

NOTE : se termine en s et non en e !

Cela peut être une faille de sécurité potentielle qui laisse échapper des informations sur le nom d'utilisateur à des pirates si vous transférez des requêtes vers d'autres serveurs ou si vous utilisez http. Personnellement, je ne fais suivre les requêtes que vers localhost, donc ce n'est pas un problème pour moi.

0 votes

C'est la seule solution qui fonctionne pour moi parmi toutes les options que j'ai essayées, merci beaucoup ! J'ai httpd comme proxy inverse (avec Kerberos connecté à AD), transmettant les requêtes HTTPS à Tomcat, sur un LPAR AIX.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X