使用 NGINX 成功进行 kerberos 身份验证后如何获取用户名?

How to get username after successful kerberos authentication using NGINX?

我按照本教程 (https://techexpert.tips/nginx/nginx-kerberos-authentication/) 在我的 NGINX 服务器上创建了一个“特殊页面”/test,需要成功的 Kerberos 身份验证才能访问它。所以这很管用。问题是,我希望应用程序知道实际上谁刚刚成功通过站点身份验证,以便我可以向他们显示他们的具体信息。因此,例如,与其弹出一个页面向所有人说明: Nginx 认证测试 我想要一个页面,将经过身份验证的 Kerberos 用户名添加到输出中,或者发出一个带有经过身份验证的用户名的 cookie。这需要支持多个同时访问网站的用户,以便每个用户都可以访问自己的信息。

我应该补充一点,当我尾随 /var/log/nginx/access.log 时,我看到一行吐出两条破折号,似乎是来自访问该站点的浏览器的浏览器信息。然后在 Kerberos 身份验证成功后,另一行被吐出到该日志,其中似乎是为第二个破折号填写的用户名。所以看起来这个信息在 nginx 的某个地方可用,如果我只能访问它的话。我真的不想从 access.log 文件中获取它。 ;-)

所有 Nginx 身份验证模块(无论是 Basic、PAM 还是 Kerberos 的 SPNEGO)的行为方式相同——Nginx 在处理 nginx.conf 时将用户名放入 $remote_user,然后使用 [=22] =] 或 'uwsgi_param' 将其传播到 REMOTE_USER FCGI 或 WSGI 变量。

因此,如果您通过 FastCGI 使用 PHP,我希望在 $_SERVER["REMOTE_USER"] 中找到它,而使用 Flask 的 Python 将具有 request.environ["REMOTE_USER"],并且等等。

另一方面,如果 Nginx 通过 HTTP(使用 'proxy_pass')与 webapp 对话,您应该能够使用 'proxy_set_header' 发送 $remote_user 通过(例如) X-Remote-User 或另一个自定义 HTTP header – 虽然你最好 very 确保除了 Nginx 之外没有人被允许与 webapp 后端对话,否则他们可以恶搞 header 然后直接走进去。