Définition des en-têtes avec Nginx auth request et OAuth2 proxy

je veux utiliser le auth_request et oauth2_proxy pour définir un en-tête sur une requête d'authentification réussie et le transmettre ensuite à l'inline proxy suivant qui traitera la requête réelle.

j'ai configuré NGINX et les différents mandataires pour faire leur truc, cependant je ne sais pas comment définir l'en-tête à partir du serveur (mandataire AUTH dans le diagramme) que j'utilise pour la requête auth de telle sorte que cet en-tête est passé au serveur suivant (BACKEND Serveur dans le diagramme)

NGINX ---- auth request ----> AUTH PROXY
                                  |
  |     <---      201  <------  SUCCESS
  |
  ----> underlying request ----> BACKEND SERVER

Ma config NGINX ressemble

server {                                                       
    listen                   9123;                             
    resolver                 10.3.0.2;                         
    resolver_timeout         30;                               

    location / {                                               
        auth_request      /_auth;                             
        proxy_set_header x-user $http_x_user;                
        proxy_pass       http://backend_server;                
    }                                                          

    location = /_auth {                                       
        internal;                                              
        proxy_pass https://auth;          
        proxy_pass_request_body off;                           
        proxy_set_header Content-Length "";                    
        proxy_set_header X-Original-URI $request_uri;
    }                                                                                                                             
}                                                              

quand je fais la requête actuelle, je vois ce qui suit dans les journaux de débogage de NGINX (ceci fait partie de la réponse du serveur auth):

2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Content-Type: text/html; charset=utf-8"    
2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Date: Mon, 14 Oct 2013 17:46:42 GMT"       
2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Server: nginx/1.2.5"                       
2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Vary: Cookie"                     
2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "x-user: 1"

je veux profiter de l' x-user en-tête et passer au serveur d'arrière-plan.

j'ai essayé diverses combinaisons dans le location / block mais aucun n'a encore fonctionné. E. g.

  • proxy_set_header x-user $upstream_http_x_user;
  • proxy_set_header x-user $http_x_user;
  • proxy_set_header x-user $sent_http_x_user;
  • proxy_pass_header x-user

rien de tout cela ne semble fonctionner. Une idée de comment je peux accomplir cette tâche? Veuillez noter que c'est le proxy auth qui définit l'en-tête que je veux passer au serveur d'arrière-plan,

16
demandé sur Alex P. 2013-10-14 21:57:12

1 réponses

Woop, pensé à elle. La configuration Nginx correcte ressemble à ceci:

location / {                                               
    auth_request      /_auth;                             
    auth_request_set $user $upstream_http_x_user;       
    proxy_set_header x-user $user;                
    proxy_pass       http://backend_server;                
}                                                          

Le problème est que vous ne pouvez pas affecter l'en-tête directement dans un autre en-tête, vous devez utiliser auth_request_set pour définir l'en-tête dans un variable puis assignez cette variable à un en-tête.

27
répondu mjallday 2013-10-14 18:16:48