oauth2 代理与 Ingress nginx 在标准身份验证流程中不传递 X-Auth-Request 标头

Dan*_*aub 5 nginx oauth-2.0 kubernetes nginx-ingress

我在 Kubernetes 集群中遇到了oauth2 代理和 Ingress Nginx(最新版本)的问题,其中X-Auth-Request标头在标准 oauth 身份验证流程中未传递到客户端。我专门使用 Azure 作为身份验证提供程序。

这是我的 oauth 代理配置的相关部分:

pass_access_token = true
pass_authorization_header = true
pass_user_headers = true
set_xauthrequest = true
Run Code Online (Sandbox Code Playgroud)

当我显式调用 时/oauth2/auth,我会按预期获得标头。但是,在标准 OAuth2 身份验证流程中,任何请求都不会返回任何标头。

这种情况有点类似于这里的另一个问题:Oauth2-Proxy do not pass X-Auth-Request-Groups header,但就我而言,我没有收到任何X-Auth-Request标头,除非我/oauth2/auth直接调用。

我还尝试将以下代码片段添加到我的应用程序 Ingress 配置中,但没有成功:

nginx.ingress.kubernetes.io/configuration-snippet: |
    auth_request_set $email $upstream_http_x_auth_request_email;
    access_by_lua_block {
      if ngx.var.email ~= "" then
        ngx.req.set_header("X-Auth-Request-Email", ngx.var.email)
      end
    }
Run Code Online (Sandbox Code Playgroud)

我已经完成了多种配置,阅读了大量博客文章,并搜索了 GitHub 问题,但一直无法解决这个问题。有谁对可能导致这种行为的原因有任何见解吗?

Dan*_*aub 1

这个方法会起作用

nginx.ingress.kubernetes.io/configuration-snippet: |
      auth_request_set $email $upstream_http_x_auth_request_email;
      
      add_header X-Auth-Request-Email $email;
Run Code Online (Sandbox Code Playgroud)

唯一的缺点是它会将标头添加到所有 http 请求中,即使是 css/js 文件