diff --git a/architecture/containers.md b/architecture/containers.md index f5b0da6..ac28a4a 100644 --- a/architecture/containers.md +++ b/architecture/containers.md @@ -198,9 +198,8 @@ access token и вращаемый refresh token. [Политика query-кэш Авторизация доступа, недопущение token в публичный ответ и атомарность ротации сессии — отдельные свойства; наличие типизированного клиента -не доказывает их. Известное расхождение регистрации отмечено в -[аутентификации](../domains/authentication/overview.md#регистрация-и-вход), -а действующий формат ошибок описан в [HTTP API](http-api.md#error-contract). +не доказывает их. Действующий формат ошибок описан в +[HTTP API](http-api.md#error-contract). Поддерживается локальный Compose и ограниченная single-server topology с SQLite. Origin браузера, адрес API и cookie policy должны быть согласованы. diff --git a/domains/authentication/overview.md b/domains/authentication/overview.md index 1fa8628..6d1bcf6 100644 --- a/domains/authentication/overview.md +++ b/domains/authentication/overview.md @@ -11,14 +11,20 @@ Пользователь регистрируется или входит по email и паролю. Регистрация сразу создаёт первую сессию. Внешние пробелы email удаляются, буквы приводятся -к нижнему регистру. Backend требует пароль не короче 12 символов и не длиннее -72 UTF-8 байтов. +к нижнему регистру. -**Известное расхождение:** сохранённое требование регистрации и проверка -в форме frontend считают нижнюю границу в UTF-8 байтах, а backend — в символах. -Не-ASCII пароль может пройти форму и получить отказ API. Это не принятое -изменение password policy; требуется отдельное согласованное решение -о проверке пароля и подтверждение полного HTTP-потока. +Пароль при регистрации — от 8 до 72 печатных ASCII-символов: латинские +буквы, цифры, спецсимволы и пробел. Кириллица, emoji, другие не-ASCII и +управляющие символы отклоняются. Пароль не обрезается и не нормализуется, а +обязательных классов символов нет. Верхняя граница вытекает из bcrypt, который +учитывает только первые 72 байта: для ASCII символ равен байту, поэтому +длинный пароль не обрезается молча. Frontend и backend проверяют одну и ту же +политику. + +При входе проверяется только то, что пароль непустой и не длиннее 72 UTF-8 +байтов. Минимум и набор символов не применяются, чтобы пользователь, +зарегистрированный по прежним правилам (в том числе с не-ASCII паролем), мог +войти. Невалидный пароль получает `400` с кодом `VALIDATION_ERROR`. Access token действует 15 минут и хранится только в памяти браузера. Refresh token имеет серверный срок 7 дней, заменяется при восстановлении