首页 > 解决方案 > 在 nginx 上使用 kerberos 时如何禁用基本身份验证?

问题描述


前言


在问题的主体中,问题描述不正确。正确的解释在 UPDATE 块中描述。为历史保存的旧文本。


我的项目由两部分组成:后端和前端。以下位置负责重定向请求:

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如果没有用户登录,则挑战是将用户重定向到 url $remote_user header。我尝试进行以下构造:在http中我添加了:

 map $remote_user $var {
     default      0; 
     ""           1;  
     }

并在位置/添加:

if ($var) {   
      return 301 http://$server_name/auth;
    }

当我尝试进入该网站时,我的浏览器中出现错误:

ERR_TOO_MANY_REDIRECTS

如何修复我的配置文件?

提前致谢!!!

更新

我的任务是在 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;
    }}

标签: nginxmod-rewritekerberosbasic-authenticationnginx-reverse-proxy

解决方案


推荐阅读