docs: describe ASCII 8-72 password policy and drop resolved discrepancy (WealthLedger/docs#46) #47

Merged
codex-bot merged 1 commits from docs/46-password-policy into develop 2026-10-16 10:47:43 +03:00
2 changed files with 15 additions and 10 deletions
+2 -3
View File
@@ -198,9 +198,8 @@ access token и вращаемый refresh token. [Политика query-кэш
Авторизация доступа, недопущение token в публичный ответ и атомарность Авторизация доступа, недопущение token в публичный ответ и атомарность
ротации сессии — отдельные свойства; наличие типизированного клиента ротации сессии — отдельные свойства; наличие типизированного клиента
не доказывает их. Известное расхождение регистрации отмечено в не доказывает их. Действующий формат ошибок описан в
[аутентификации](../domains/authentication/overview.md#регистрация-и-вход), [HTTP API](http-api.md#error-contract).
а действующий формат ошибок описан в [HTTP API](http-api.md#error-contract).
Поддерживается локальный Compose и ограниченная single-server topology с SQLite. Поддерживается локальный Compose и ограниченная single-server topology с SQLite.
Origin браузера, адрес API и cookie policy должны быть согласованы. Origin браузера, адрес API и cookie policy должны быть согласованы.
+13 -7
View File
@@ -11,14 +11,20 @@
Пользователь регистрируется или входит по email и паролю. Регистрация сразу Пользователь регистрируется или входит по email и паролю. Регистрация сразу
создаёт первую сессию. Внешние пробелы email удаляются, буквы приводятся создаёт первую сессию. Внешние пробелы email удаляются, буквы приводятся
к нижнему регистру. Backend требует пароль не короче 12 символов и не длиннее к нижнему регистру.
72 UTF-8 байтов.
**Известное расхождение:** сохранённое требование регистрации и проверка Пароль при регистрации — от 8 до 72 печатных ASCII-символов: латинские
в форме frontend считают нижнюю границу в UTF-8 байтах, а backend — в символах. буквы, цифры, спецсимволы и пробел. Кириллица, emoji, другие не-ASCII и
Не-ASCII пароль может пройти форму и получить отказ API. Это не принятое управляющие символы отклоняются. Пароль не обрезается и не нормализуется, а
изменение password policy; требуется отдельное согласованное решение обязательных классов символов нет. Верхняя граница вытекает из bcrypt, который
о проверке пароля и подтверждение полного HTTP-потока. учитывает только первые 72 байта: для ASCII символ равен байту, поэтому
длинный пароль не обрезается молча. Frontend и backend проверяют одну и ту же
политику.
При входе проверяется только то, что пароль непустой и не длиннее 72 UTF-8
байтов. Минимум и набор символов не применяются, чтобы пользователь,
зарегистрированный по прежним правилам (в том числе с не-ASCII паролем), мог
войти. Невалидный пароль получает `400` с кодом `VALIDATION_ERROR`.
Access token действует 15 минут и хранится только в памяти браузера. Access token действует 15 минут и хранится только в памяти браузера.
Refresh token имеет серверный срок 7 дней, заменяется при восстановлении Refresh token имеет серверный срок 7 дней, заменяется при восстановлении