带有cookie的nginx auth_request

时间:2019-04-18 17:52:08

标签: authentication nginx cookies

可能是this question的副本,但没有答案,我在那儿尝试了建议,但无法使它生效。我需要先授权每个请求,然后再代理它,我正尝试通过Cookie进行操作,但是未在任何后续请求中设置Cookie值。互联网上的大多数地方都推荐类似以下的内容

server {
  auth_request /auth;

  location /auth {
    internal;
    proxy_pass http://auth:8080/auth;
    auth_request_set $saved_set_cookie $upstream_http_set_cookie;
    add_header Set-Cookie $saved_set_cookie;
  }
}

但这似乎不起作用。我甚至尝试使用自定义标头来查看是否可以看到它,如上面的问题所述,它不起作用。

server {
  auth_request /auth;

  location /auth {
    internal;
    proxy_pass http://auth:8080/auth;
    auth_request_set $saved_set_cookie $upstream_http_set_cookie;
    add_header X-COOKIE-TEST $saved_set_cookie;
  }
}

如果我直接进入身份验证服务器,我确实会看到cookie已设置

enter image description here

1 个答案:

答案 0 :(得分:0)

https://github.com/nginxinc/NGINX-Demos/blob/331fd357e6e1813b5d41aed48880cf274d31dcee/oauth2-token-introspection-oss/frontend.conf#L29 找到了一个可行的解决方案,它非常简单(Nginx 1.18.0):

  location / {
    auth_request /authz;
    auth_request_set $new_cookie $sent_http_set_cookie; # use sent_http_*, not upstream_http_*
    add_header Set-Cookie $new_cookie;
    add_header X-Test $sent_http_set_cookie;            # it's even working directly
  }