NGINX auth_request - PullRequest
       17

NGINX auth_request

0 голосов
/ 05 апреля 2020

В настоящее время я использую nginx в качестве обратного прокси-сервера для нескольких различных веб-серверов в моей сети. До сих пор я просто успешно использовал basic_auth, но хотел улучшить его. Я пытаюсь объединить auth_request и Flask Mega Tutorial для создания портала аутентификации.

У меня есть два flask маршрута, один проверяет, вошел ли пользователь в систему. и возвращает 200 и 401, если нет.

@app.route('/nzb_auth', methods=['GET', 'POST'])
def nzb_auth():
    if current_user.is_authenticated:
        return Response(status=200)

nginx захватывает 401 и перенаправляет на страницу my / login. Страница входа выполняет аутентификацию, и после успешного завершения возвращает от 200 до nginx.

@app.route('/login', methods=['GET', 'POST'])
def login():
    if current_user.is_authenticated:
        return Response(status=200)
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user is None or not user.check_password(form.password.data):
            flash('Invalid username or password')
            return redirect(url_for('login'))
        login_user(user, remember=form.remember_me.data)
        return Response(status=200)
    return render_template('login.html', title='Sign In', form=form)

Кажется, это очень близко к работе, но не совсем там. Когда я попал на сайт www.example.com, я вижу, что nginx успешно проходит после / auth, распознает, что я не вошел в систему, и перенаправляет на / login. После успешного входа в систему, я просто выведен на пустую страницу. В соответствии с адресной строкой, я все еще на /login.

Сначала я предположил, что это не работает вообще, но для тестирования я добавил proxy_pass на '/' на одном из моих внутренних сайтов и попробовал еще раз. Все еще не повезло. Но случайно я снова открыл www.example.com в том же Приватном окне, и оно действительно сработало!

Так что кажется, что каждый шаг успешен, я просто никуда не перенаправлюсь, как только начнется auth_request успешный. Какие-либо предложения? Вот мой блок сервера (я удалил этот пропуск прокси).

server {
    root /var/www/[SERVER DIRECTORY]/html;
    index index.html index.htm index.nginx-debian.html;
    server_name [SERVER NAME];

    location / {
        auth_request    /nzb_auth;
        error_page 401 = @error401;
    }
    #If user is logged in, 200 gets returned, otherwise 401
    location = /nzb_auth {
        internal;
        proxy_pass  [http://SERVER NAME]/nzb_auth;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header        X-Original-URI $request_uri;
    }
    #login route for nzb_auth
    location /login {
        proxy_pass [http://SERVER NAME]/login;
        proxy_set_header        X-Original-URI $request_uri;
    }
    #If not logged in /nzb_auth responds with 401, nginx redirects to /login
    location @error401 {
        return 302 [http://SERVER NAME]/login;
}
}
    return Response(status=401)
...