Nginx/Lua JWT auth Gateway
Аутентифика́ция (англ. authentication < греч. αὐθεντικός [authentikos] «реальный, подлинный» < αὐτός [autos] «сам; он самый») — процедура проверки подлинности, например:
проверка подлинности пользователя путём сравнения введённого им пароля (для указанного логина) с паролем, сохранённым в базе данных пользовательских логинов
Авториза́ция (англ. authorization «разрешение; уполномочивание») — предоставление определённому лицу или группе лиц прав на выполнение определённых действий; а также процесс проверки (подтверждения) данных прав при попытке выполнения этих действий. Часто можно услышать выражение, что какой-то человек «авторизован» для выполнения данной операции — это значит, что он имеет на неё право.
Аутентификация — Получения ключа для выполнения действий
Авторизация — Проверка прав доступа по ключу Аутентификации
Наружу доступен nginx и только через nginx доступны другие сервисы
Nginx выступает в роли revers proxy + балансировщик(при необходимости)
Nginx-у доступен внутри сети сервис “Auth Center” и метод “check_jwt”
Whitelist и Blacklist хранятся в REDIS, чтобы не разбирать JWT
Проксируем запросы на “Auth Center” для пользователя, без ограничений
Запускается перед proxy_path, имеет подключение к Redis
На этом уровне мы должны гарантировать, что если есть заголовок Authentication в запросе, то он действительный и валидный
REDIS Lists raw exired:
Получили токен, проверяем его в списках
Если токена нет в списках White/Black — Разбираем его
Имеет подключение к REDIS
Занимается:
check_jwt
Получает JWT, разбирает его, проверяет статус пользователя, возвращает результат
refresh_token
Принимает refresh token и JWT. Проверяет JWT на blacklist
Генерирует новый. Старый отправляет в blacklist с expired == его времени жизни
Новый — в whitelist по времени его жизни
logout
Принимает JWT, кладет его в blacklist
login
Генерирует JWT/refresh token, кладет его в whitelist
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-auth.key -out /etc/ssl/certs/nginx-auth.crt
openssl dhparam -out /etc/ssl/certs/nginx-auth.pem 2048