Этот документ поможет вам находить и анализировать неудачные попытки входа в систему Ринго MDM. Вы узнаете, где искать информацию об ошибках аутентификации, как идентифицировать финальные события и связывать записи в логах с конкретными пользователями.
Расположение: logs/backend.log
Формат записи:
HH:mm:ss DD-MM-YYYY | backend | <CONTEXT> | <LEVEL> | <MESSAGE>
или для системных событий (без контекста):
HH:mm:ss DD-MM-YYYY | backend | <LEVEL> | <MESSAGE>
Пример:
09:37:56 26-11-2025 | backend | AuthService | error | Refresh session expired |
Расположение: logs/backend.log (в том же файле)
Формат: Apache Combined Log Format (с префиксом времени)
09:37:56 26-11-2025 | backend | info | 192.168.65.1 - - [26/Nov/2025:09:37:56 +0000] "GET /api/v1/auth/refresh HTTP/1.1" 401 155 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36"
| Контекст | Описание |
|---|---|
AuthService |
Основная логика аутентификации пользователей |
LdapConnection |
Подключение и аутентификация через LDAP |
LdapService |
Операции поиска пользователей в LDAP |
AgentGateway |
Аутентификация агентов устройств |
AuthGuard |
Проверка токенов доступа |
| Эндпоинт | Метод | Описание |
|---|---|---|
/api/v1/auth |
POST | Основной вход в систему |
/api/v1/auth/refresh |
GET | Обновление токена доступа |
/api/v1/auth/2fa |
POST | Двухфакторная аутентификация |
/enroll/auth |
POST | Аутентификация при регистрации устройства |
/api/v1/self-service/auth |
POST | Аутентификация Self-Service |
Лог сервиса (внутренний):
11:45:23 01-12-2025 | backend | AuthService | error | Failed to sync ldap user for login: Error: Failed to create ldap client: Error: getaddrinfo ENOTFOUND ldap.example.com |
HTTP-лог (при ошибке возвращается 401):
11:45:23 01-12-2025 | backend | info | 192.168.1.100 - - [01/Dec/2025:11:45:23 +0000] "POST /api/v1/auth HTTP/1.1" 401 89 "http://app.example.com/" "Mozilla/5.0..."
Примечание: Система специально не различает «неверный пароль» и «пользователь не найден» в ответе клиенту для предотвращения перебора учётных записей.
Поведение: Если пользователь не найден локально, система пытается найти его в LDAP.
Лог сервиса:
14:22:10 02-12-2025 | backend | AuthService | error | Failed to sync ldap user for login: Error: User not found in LDAP |
HTTP-лог:
14:22:10 02-12-2025 | backend | info | 192.168.1.50 - - [02/Dec/2025:14:22:10 +0000] "POST /api/v1/auth HTTP/1.1" 401 89 "-" "Mozilla/5.0..."
Лог сервиса:
09:15:42 03-12-2025 | backend | AuthService | error | Missing auth session
09:15:42 03-12-2025 | backend | AuthService | error | Refresh session expired
HTTP-лог:
09:15:42 03-12-2025 | backend | info | 192.168.1.75 - - [03/Dec/2025:09:15:42 +0000] "GET /api/v1/auth/refresh HTTP/1.1" 401 112 "-" "Mozilla/5.0..."
Лог сервиса:
16:30:15 03-12-2025 | backend | AuthService | error | JWT parse error JsonWebTokenError: invalid signature
HTTP-лог (любой защищённый эндпоинт):
16:30:15 03-12-2025 | backend | info | 192.168.1.120 - - [03/Dec/2025:16:30:15 +0000] "GET /api/v1/devices HTTP/1.1" 401 78 "-" "Mozilla/5.0..."
Лог сервиса:
05:02:42 03-12-2025 | backend | LdapConnection | error | getaddrinfo ENOTFOUND dc1.example.com | Error: getaddrinfo ENOTFOUND dc1.example.com
at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:122:26)
at GetAddrInfoReqWrap.callbackTrampoline (node:internal/async_hooks:130:17)
05:02:42 03-12-2025 | backend | AuthService | error | Failed to sync ldap user for login: Error: Failed to create ldap client: Error: getaddrinfo ENOTFOUND dc1.example.com |
Варианты ошибок LDAP:
| Ошибка | Описание |
|---|---|
getaddrinfo ENOTFOUND |
DNS не может найти LDAP-сервер |
ETIMEDOUT |
Таймаут подключения к LDAP |
ECONNREFUSED |
Соединение отклонено |
Failed to create ldap client |
Общая ошибка создания LDAP-клиента |
Лог сервиса:
10:45:30 03-12-2025 | backend | LdapConnection | warn | Failed to authenticate ldap user: InvalidCredentialsError: 80090308: LdapErr: DSID-0C090439, comment: AcceptSecurityContext error, data 52e, v4f7c
at ...
Примечание: Ошибка
data 52eв Active Directory означает неверный пароль.
Коды ошибок Active Directory:
| Код | Значение |
|---|---|
525 |
Пользователь не найден |
52e |
Неверный пароль |
530 |
Вход запрещён в это время |
531 |
Вход с этой рабочей станции запрещён |
532 |
Пароль истёк |
533 |
Аккаунт отключён |
701 |
Аккаунт истёк |
773 |
Требуется смена пароля |
775 |
Аккаунт заблокирован |
Лог сервиса (содержит username с маскированным паролем!):
12:00:00 03-12-2025 | backend | error | Catched non-HttpException error:
12:00:00 03-12-2025 | backend | error | TypeError: Cannot read properties of undefined (reading 'password') | TypeError: ...
at AuthService.login (/usr/src/app/src/modules/auth/auth.service.ts:191:23)
at ...
12:00:00 03-12-2025 | backend | error | Request body was:
12:00:00 03-12-2025 | backend | error | {
"username": "john.doe",
"password": "******"
}
12:00:00 03-12-2025 | backend | error | Response body was:
12:00:00 03-12-2025 | backend | error | {"message":"Внутренняя ошибка сервера","statusCode":500,...}
Важно: При ошибках 500 логируется username из тела запроса, а password маскируется звёздочками
******.
HTTP-лог:
12:00:00 03-12-2025 | backend | info | 192.168.1.200 - - [03/Dec/2025:12:00:00 +0000] "POST /api/v1/auth HTTP/1.1" 500 145 "-" "Mozilla/5.0..."
Лог сервиса:
14:20:30 03-12-2025 | backend | AuthService | error | Invalid two factor auth token
HTTP-лог:
14:20:30 03-12-2025 | backend | info | 192.168.1.80 - - [03/Dec/2025:14:20:30 +0000] "POST /api/v1/auth/2fa HTTP/1.1" 401 98 "-" "Mozilla/5.0..."
Лог HTTP:
08:15:00 03-12-2025 | backend | info | 192.168.1.55 - - [03/Dec/2025:08:15:00 +0000] "POST /api/v1/auth HTTP/1.1" 401 85 "-" "-"
| Паттерн | Описание | Приоритет |
|---|---|---|
401 |
HTTP-статус Unauthorized | Высокий |
error |
Уровень логирования error | Высокий |
Failed to |
Начало сообщений об ошибках | Высокий |
Invalid |
Неверные данные | Высокий |
Unauthorized |
Ошибка авторизации | Высокий |
LDAP / ldap |
Ошибки LDAP | Средний |
auth |
Контекст аутентификации | Средний |
token |
Проблемы с токенами | Средний |
expired |
Истёкшие сессии/токены | Средний |
docker logs <container_name> 2>&1 | grep -C 3 '/api/v1/auth.*401'
docker logs <container_name> 2>&1 | grep '" 401 '
docker logs <container_name> 2>&1 | grep -iE "token.*invalid|invalid.*token|JWT|expired|Missing auth session"
docker logs <container_name> 2>&1 | grep '" 401 ' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort | uniq -c | sort -rn
Пример результата:
15 192.168.1.100
8 192.168.1.50
3 10.0.0.25
Финальным событием неудачной аутентификации считается:
| Признак | Описание | Пример |
|---|---|---|
| HTTP 401 | Ответ сервера Unauthorized | "POST /api/v1/auth HTTP/1.1" 401 |
| HTTP 403 | Доступ запрещён | "GET /api/v1/devices HTTP/1.1" 403 |
HTTP 500 при /auth |
Внутренняя ошибка при аутентификации | "POST /api/v1/auth HTTP/1.1" 500 |
Цепочка событий при неудачной аутентификации:
Пример полной цепочки в логах:
05:02:42 03-12-2025 | backend | LdapConnection | error | getaddrinfo ENOTFOUND dc1.example.com | Error: getaddrinfo ENOTFOUND dc1.example.com
05:02:42 03-12-2025 | backend | AuthService | error | Failed to sync ldap user for login: Error: Failed to create ldap client: Error: getaddrinfo ENOTFOUND dc1.example.com |
05:02:42 03-12-2025 | backend | info | 192.168.1.100 - - [03/Dec/2025:05:02:42 +0000] "POST /api/v1/auth HTTP/1.1" 401 89 "-" "Mozilla/5.0..."
| Параметр | Где найти | Пример |
|---|---|---|
| IP-адрес | HTTP-лог | 192.168.65.1 |
| User-Agent | HTTP-лог | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)... |
| Timestamp | Начало строки | 11:45:23 01-12-2025 |
| HTTP-статус | HTTP-лог | 401, 200, 500 |
| Endpoint | HTTP-лог | POST /api/v1/auth |
| Referer | HTTP-лог | http://localhost:3000/ |
| Username (LDAP) | HTTP-лог в теле запроса при 500 LDAP-ошибках | 12:00:00 03-12-2025 | backend | error | { "username": "john.doe", "password": "******" } |
| Пароль (LDAP) | HTTP-лог в теле запроса при 500 LDAP-ошибках | 12:00:00 03-12-2025 | backend | error | { "username": "john.doe", "password": "******" } |
Важно: При ошибке 401 тело запроса не логируется (для безопасности). Username виден только при ошибках 500 или других внутренних ошибках.
11:44:59 01-12-2025 | backend | info | 192.168.1.100 - - [01/Dec/2025:11:44:59 +0000] "POST /api/v1/auth HTTP/1.1" ... (начало запроса)
11:44:59 01-12-2025 | backend | LdapConnection | error | getaddrinfo ENOTFOUND dc1.example.com | Error: getaddrinfo ENOTFOUND dc1.example.com
11:44:59 01-12-2025 | backend | AuthService | error | Failed to sync ldap user for login: Error: Failed to create ldap client: Error: getaddrinfo ENOTFOUND dc1.example.com |
11:44:59 01-12-2025 | backend | info | 192.168.1.100 - - [01/Dec/2025:11:44:59 +0000] "POST /api/v1/auth HTTP/1.1" 401 89 "-" "Mozilla/5.0..."
14:30:15 03-12-2025 | backend | info | 10.0.0.50 - - [03/Dec/2025:14:30:15 +0000] "POST /api/v1/auth HTTP/1.1" ...
Причина: Нет явного лога, проверка пароля просто возвращает false
Результат:
14:30:15 03-12-2025 | backend | info | 10.0.0.50 - - [03/Dec/2025:14:30:15 +0000] "POST /api/v1/auth HTTP/1.1" 401 89 "-" "Mozilla/5.0..."
09:15:42 03-12-2025 | backend | info | 192.168.1.75 - - [03/Dec/2025:09:15:42 +0000] "GET /api/v1/auth/refresh HTTP/1.1" ...
09:15:42 03-12-2025 | backend | AuthService | error | Refresh session expired
09:15:42 03-12-2025 | backend | info | 192.168.1.75 - - [03/Dec/2025:09:15:42 +0000] "GET /api/v1/auth/refresh HTTP/1.1" 401 112 "-" "Mozilla/5.0..."
14:20:30 03-12-2025 | backend | info | 192.168.1.80 - - [03/Dec/2025:14:20:30 +0000] "POST /api/v1/auth/2fa HTTP/1.1" ...
Причина (ошибка проверки 2FA). Конкретная ошибка не логируется, только результат
Результат
14:20:30 03-12-2025 | backend | info | 192.168.1.80 - - [03/Dec/2025:14:20:30 +0000] "POST /api/v1/auth/2fa HTTP/1.1" 401 98 "-" "Mozilla/5.0..."
| Тип ошибки | Контекст | Ключевое слово | HTTP |
|---|---|---|---|
| Неверный пароль (local) | - | - | 401 |
| Неверный пароль (LDAP) | LdapConnection | Failed to authenticate ldap user |
401 |
| Пользователь не найден | AuthService | Failed to sync ldap user |
401 |
| LDAP недоступен | LdapConnection | getaddrinfo ENOTFOUND |
401 |
| LDAP timeout | LdapConnection | ETIMEDOUT |
401 |
| Сессия не найдена | AuthService | Missing auth session |
401 |
| Сессия истекла | AuthService | Refresh session expired |
401 |
| Неверный JWT | AuthService | JWT parse error |
401 |
| Неверный 2FA код | AuthService | - | 401 |
| Отсутствует User-Agent | - | - | 401 |
| Внутренняя ошибка | - | Catched non-HttpException |
500 |