使用NGINX auth_request和oauth2_proxy设置头部

798qvoo8  于 7个月前  发布在  Nginx
关注(0)|答案(2)|浏览(80)

我想使用auth_requestoauth2_proxy在成功的身份验证请求后设置一个头,然后将其传递给下一个将处理实际请求的代理内联。
我已经设置了NGINX和各种代理来做他们的事情,但是我不确定如何从服务器(图中的AUTH PROXY)设置我用于认证请求的头部,以便将该头部传递到下一个服务器(图中的EQUIPEND SERVER)

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

字符串
我的NGINX配置看起来像

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;
    }                                                                                                                             
}


当我发出实际请求时,我在Nginx调试日志中看到以下内容(这是来自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"


我想获取x-user头并将其传递到后端服务器。
我在location /块中尝试了各种组合,但没有一个有效。

  • 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

所有这些似乎都不起作用。有什么想法我可以完成这个任务吗?请注意,它是auth代理设置我想传递给后端服务器的头,

cgvd09ve

cgvd09ve1#

Woop,figured it out.正确的NGINX配置看起来像这样:

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

字符串
问题是,你不能直接将头分配给另一个头,你必须使用auth_request_set将头设置为一个 * 变量 *,然后将该变量分配给一个头。

a0x5cqrl

a0x5cqrl2#

经过几个小时的调试,我找到了解决方案,灵感来自@mjallday我的nginx文件是

location /protected-service/ {
            auth_request /auth/;
            auth_request_set $authentication_id  $upstream_http_x_authentication_id; #sent by the auth service response in header as X-Authentication-Id
            proxy_pass http://protected-service:8000;
            proxy_set_header X-Authentication-Id $authentication_id ;
        }

字符串
现在,在受保护的服务中,以HTTP_X_AUTHENTICATION_ID的形式检索头,请注意“-”是如何转换为““的,并且在目的地中需要HTTP prefix

相关问题