# SYSTEM :: ENTAXY :: BASIC AUTH :: HTPASSWD

Генерация htpasswd файла, сервис выдачи файла и checksum
Работает с nginX шифрования MD5 и SHA-1   

Описание данного подхода аутентификации:
1. Nginx по умолчанию собран с модулем 
ngx_http_auth_basic_module, который проводит 
базовую аутентификацию через файлы htpasswd.
2. Файл passwd периодически или по событиям 
синхронизируется между нодами при помощи скрипта синхронизации,
который вызывает Rest сервис
шины. (Rsync использовать нельзя, так как порты
закрыты.) 
3. Аутентификация делается только на Nginx без доп. 
нагрузки на шину
4. Файл хранится на сервере nginx и аутентификация
будет работать всегда
5. Подход рассчитан на балансировщики реализующие basic аутентификацию 
 с использованием htpasswd


## Сборка

Сборка осуществляется командой

```
mvn clean install
```

Файл конфигурации модуля ru.entaxy.esb.system.basic_auth.htpasswd.cfg хранится в SYSTEM :: ENTAXY :: Features

## Сервис Htpasswd

**Настраивается свойствами**

htpasswd.service.host по умолчанию 0.0.0.0

htpasswd.service.port по умолчанию 9091

htpasswd.service.root.path по умолчанию /htpasswd

**Методы:**

GET http://localhost:9091/htpasswd - получение содержимого файла htpasswd

GET http://localhost:9091/htpasswd/checksum - получение checksum текущего htpasswd

**Кластер:**

Для избежания рассинхронизации файлов htpasswd на разных серверах требуется настроить шару между карафами и установить адрес этой папки в свойство

htpasswd.file.directory=/mnt/share

## Скрипт сихронизации htpasswd для nginX

Расположен в папке resources/script/htpasswd-checker.sh

Запускается из любой папки расположенной на сервере.

Перед запуском проверить и при необходимости поправить переменные в скрипте

* KARAF_HOST_NAMES=("http://192.168.122.93:9091"  "http://192.168.122.94:9091") - караф сервера с запущеным сервисом htpasswd
* HTPASSWD_STORAGE=/etc/nginx/htpasswd - адрес файла htpasswd, на который настроен nginX
* LOGFILE="htpasswd-sync.log" - адрес лог файла
 
Добавить запуск скрипта через cron
sudo crontab -e

```
раз в минут
*/5 * * * * <path_to_script> >> <path_to_log_file> 2>&1

либо раз в минуту
*/1 * * * * <path_to_script> >> <path_to_log_file> 2>&1
```


 