0

Я пытаюсь использовать сценарий Lua, который я нашел в этом репозитории Git: https://github.com/knq/nginx-crowd-lua/blob/master/crowd-auth.lua, чтобы разрешить пользователям использовать ограниченный контент в системе управления пользователями Atlassian Crowd.NGINX Lua Базовый HTTP-авторизация/аутентификация Разрешить определенное количество попыток

Что происходит, когда я использую этот скрипт так, как будто это означает, что если пользователь вводит неправильное имя пользователя/пароль, браузер возвращает 403 Запрещенный ответ, не позволяя пользователю повторить попытку, если пользователь не закроет браузер и не отправится вернуться на страницу.

То, что я пытаюсь сделать, это разрешить 3 попытки входа в систему до отображения страницы 403.

Я пробовал зацикливать этот скрипт, но либо цикл не работает, а неправильный пользовательский/пропуск сразу же переходит на страницу 403 с первой попытки, или цикл бесконечен, что позволяет делать неограниченные попытки.

Не могли бы вы посоветовать это? Если вам нужно больше деталей, прокомментируйте, и я предоставлю.

Thanks

ответ

0

Я понял. Для тех, кто также заинтересован в этом, я опубликовал решение:

Команда ngx.header['WWW-Authenticate'] останавливает сценарий и отправляет новый запрос. Никакая переменная типа, будь то в NGINX или Lua, не может удерживать ее на разных запросах. Что вы можете сделать, это установить куки, который содержит, что Макс AUTH попытки, как это:

local auth_tries = ngx.var.cookie_AuthAttempts 

if not auth_tries then 
    auth_tries = 1 
end 

if type(auth_tries) == "string" then 
    auth_tries = tonumber(auth_tries) 
end 

Затем установите счетчик в конце цикла, а также установить куки на его значение:

auth_header = nil 
auth_tries = auth_tries + 1 

ngx.header['Set-Cookie'] = "AuthAttempts="..auth_tries.."; Path=/; Expires="..ngx.cookie_time(ngx.time() + 3600*24) 

Тогда, если не более неудачных попыток было достигнуто, очистить и отправить 401 ответ:

ngx.header['Set-Cookie'] = "AuthAttempts=0; Path=/; Expires="..ngx.cookie_time(ngx.time() + 3600*24) 

if res ~= nil then 
if res.status ~= 200 then 
    ngx.exit(ngx.HTTP_FORBIDDEN) 
end 
else 
    ngx.exit(ngx.HTTP_FORBIDDEN) 
end