在 nginx 上使用 kerberos 时如何禁用基本身份验证?

在 nginx 上使用 kerberos 时如何禁用基本身份验证?

我的任务是在 nginx 上配置 Kerberos 身份验证。后端是 django。想法是,当向 api 发出请求时,nginx 应该执行 kerberos 身份验证。但如果用户不在域中,则必须重定向到/auth授权页面,以便用户可以在 django CMS 中注册的帐户下进行身份验证。

域用户身份验证成功。但非域用户存在问题。当您打开进行 API 调用的站点页面时,会出现一个基本身份验证窗口。我使用了指令auth_gss_allow_basic_fallback off,但这没有帮助。

我该如何禁用此功能并配置重定向到/auth

我的配置文件(我没有指定 gzip、headers 等设置):

server {

listen       80;
server_name  srv-01.example.com;

proxy_set_header remote-user $remote_user;

location / {
    root /opt/site/;
    try_files $uri $uri/ /index.html;
}

location /adminpanel {
    proxy_pass http://192.168.1.4:4567;
}
location /api {
    proxy_pass http://192.168.1.4:4567;

auth_gss on;
auth_gss_realm EXAMPLE.COM;
auth_gss_keytab /etc/krb5.keytab;
auth_gss_service_name HTTP/srv-01.example.com;
auth_gss_allow_basic_fallback off;
}}

谢谢您的帮助!

答案1

我可能错了,但我认为通过 AJAX 进行的 API 调用不会附加身份验证凭据。浏览器将仅将它们附加用于 URL 导航

我有一个非常相似的设置并且它对我有用:

默认 / 处理程序指向登录对话框,但 /auto-login 位于 auth_gss 下

请注意,如果用户未在域中经过身份验证,则 nginx 返回 401,因此通过为此端点重定向 401,我们可以让非 AD 用户获得登录对话框。

/auto-login 处理程序仅创建 django 会话 cookie 并重定向到 /,因此 AD 用户直接登录:

location /auto-login {
  uwsgi_pass django;
  include /usr/lib/myapp/wsgi/uwsgi_params;
  auth_gss on;
  auth_gss_realm EXAMPLE.COM;
  auth_gss_service_name HTTP/example.com;
  auth_gss_allow_basic_fallback off;

  error_page 401 /;
}

如果您使用心跳端点,则可以向其中添加相同的设置,这样,如果管理员撤销了凭证,用户就会尽快被踢出。

location /heart-beat {
  uwsgi_pass django;
  include /usr/lib/myapp/wsgi/uwsgi_params;
  auth_gss on;
  auth_gss_realm EXAMPLE.COM;
  auth_gss_service_name HTTP/example.com;
  auth_gss_allow_basic_fallback off;
}

相关内容