Nginx - Forward HTTP AUTH - Utilisateur?

13

J'ai des problèmes avec Nginx et Jenkins (Hudson). J'essaie d'utiliser Nginx comme proxy inverse pour l'instance Jenkins avec l'authentification HTTP de base.

Cela fonctionne jusqu'à présent, mais je ne sais pas comment passer l'en-tête avec le nom d'utilisateur d'authentification?

location / {
  auth_basic "Restricted";
  auth_basic_user_file /usr/share/nginx/.htpasswd;
  sendfile off;

  proxy_pass         http://192.168.178.102:8080;
  proxy_redirect     default;
  proxy_set_header   Host             $http_host;
  proxy_set_header   X-Real-IP        $remote_addr;
  proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_set_header   X-Forwarded-User $http_authorization; 
  proxy_max_temp_file_size 0;

  #this is the maximum upload size
  client_max_body_size       10m;
  client_body_buffer_size    128k;

  proxy_connect_timeout      90;
  proxy_send_timeout         90;
  proxy_read_timeout         90;             
  proxy_buffer_size          4k;
  proxy_buffers              4 32k;
  proxy_busy_buffers_size    64k;
  proxy_temp_file_write_size 64k;

}

opHASnoNAME
la source
1
Notez que vous voulez probablement un «d» supplémentaire dans «X-Forwared-User».
Paul

Réponses:

16

Essayez d'ajouter ces directives à votre bloc d'emplacement

proxy_set_header Authorization $http_authorization;
proxy_pass_header  Authorization;
Andrei Mikhaltsov
la source
Cet en-tête passe: Nom d'utilisateur: YXJuZTpraWxsZXI de base, pas le nom correct de http auth (;
opHASnoNAME
6
Ce doit être une chaîne encodée en base64 en.wikipedia.org/wiki/Basic_access_authentication#cite_note-8 essayez de le décoder
Andrei Mikhaltsov
L'en-tête d'autorisation doit être un en-tête codé en base64, oui. Mais ce n'est pas de cela qu'il s'agit. La question est de passer le nom d'utilisateur d'authentification dans les en-têtes, pas l'en-tête d'autorisation complète.
Olli
1
YXJuZTpraWxsZXIdécode pour arne:killer- bel exemple @opHASnoNAME :-)
Enda Farrell
pass_header et set_header ...? n'est-ce pas deux fois plus ou moins le même effet? Les deux devraient fonctionner, non?
phip1611
6

Pour que cela fonctionne avec le plugin d'authentification proxy inverse Jenkins:

proxy_set_header Authorization "";
proxy_set_header X-Forwarded-User $remote_user;

Si vous ne réinitialisez pas l'en- Authorizationtête, nginx le transmettra par défaut, et lors de l'activation du plug-in d'authentification proxy inverse, Jenkins (jetty) essaiera de ré-authentifier l'utilisateur, et échoue.

nginx version 1.12.1, Jenkins 2.113.

Olli
la source
MERCI! Ceci est exactement ce que je cherchais. Très appréciée.
Erutan409