Перейти к основному содержимому

Параметры безопасности

Зачем нужно

Документ фиксирует конкретные security-параметры: password policy, JWT/OAuth TTL, rate limits, lockout, retention, cookies, CORS, redaction и ограничения на секреты.

Password policy

ПараметрЗначение
Минимальная длина10 символов
Максимальная длина128 символов
Обязательные классыминимум 3 из 4: lowercase, uppercase, digit, symbol
Запрещеноemail/phone/display name внутри пароля
Повторное использованиенельзя использовать последние 5 password hashes
HashArgon2id preferred; bcrypt допустим для совместимости
Rehashпри login, если hash policy устарела

JWT and sessions

ПараметрЗначение
Access token TTL15 минут
Main refresh token TTL30 дней
Remember me refresh TTL90 дней
Refresh rotationвсегда
Reuse detectionотзывает всю token family
Clock skew60 секунд
Signing algorithmRS256/JWKS для всех ecosystem access tokens; HS256 допустим только для internal identity-only artifacts, которые не принимаются другими доменами
JWKS rotationновый key публикуется минимум за 24 часа до использования

OAuth/OIDC

ПараметрЗначение
Authorization code TTL5 минут
PKCEобязателен для public clients
Code challenge methodтолько S256
OAuth access token TTL1 час
OAuth refresh token TTL30 дней
Consent lifetimeдо revoke или изменения scopes
Redirect URI matchingточное совпадение, wildcard запрещён
Client secret storageтолько hash

Verification codes

PurposeTTLAttemptsПовторная отправка
login OTP5 минут560 секунд
contact verify15 минут560 секунд
reset password10 минут560 секунд
sso_otc10 минут560 секунд

Новый код для того же destination + purpose инвалидирует предыдущий active code.

Rate limits

ДействиеЛимит
/auth/register5/IP/час, 3/identifier/час
/auth/flow/start20/IP/10 минут
password step10/IP/10 минут, 5/user/10 минут
OTP verify10/IP/10 минут, 5/code
send verification code3/destination/10 минут, 10/IP/час
reset password start5/identifier/час, 20/IP/час
refresh token60/session/час
OAuth authorize60/client/IP/10 минут
OAuth token30/client/IP/10 минут
invitation create30/actor/час
admin mutation120/actor/час
plugin install10/actor/день

Rate limit response: 429 identity.auth.rate_limited, header Retry-After.

Lockout

  • 5 failed password attempts within 10 minutes: lock user credential for 15 minutes.
  • 10 failed attempts within 24 hours: require reset password or admin unlock.
  • Lockout не раскрывается публично как “аккаунт существует”.
  • Admin unlock пишет audit.

Cookies and browser storage

Если refresh token хранится в cookie:

  • HttpOnly;
  • Secure;
  • SameSite=Lax для same-site app;
  • SameSite=None только при необходимости cross-site OAuth callback;
  • path ограничен auth endpoints;
  • CSRF token обязателен для cookie-auth mutating requests.

LocalStorage разрешён только для saved account metadata без tokens и secrets.

CORS

  • Allowed origins задаются в system_settings.
  • Credentials разрешены только для доверенных origins.
  • x-request-id exposed header.
  • Wildcard origin запрещён в production.

Redaction

Всегда редактируются:

  • password fields;
  • verification codes;
  • JWT/access/refresh/id tokens;
  • OAuth authorization codes;
  • cookies;
  • authorization headers;
  • TOTP secrets;
  • plugin secrets;
  • SMTP credentials;
  • private keys;
  • API keys.

Retention

ДанныеСрок
auth flow sessions7 дней
verification codes30 дней после expiry/consume
active sessionsдо expiry/revoke
revoked sessions180 дней
audit logs3 года
event logs365 дней
frontend diagnosticsтолько application logs, без БД
OAuth codes7 дней
OAuth refresh tokens revoked/expired180 дней

Admin danger actions

Требуют re-auth не старше 10 минут:

  • смена роли super/admin;
  • отзыв всех сессий пользователя;
  • отключение OAuth client;
  • установка/включение plugin;
  • изменение CORS origins;
  • изменение password/rate limit settings;
  • просмотр/экспорт audit logs с PII.

Готовность

  • значения лимитов перенесены в конфигурацию;
  • production не использует dev-секреты;
  • security-параметры покрыты tests;
  • logs проверены на отсутствие secrets;
  • OAuth и auth endpoints имеют отдельные лимитеры.