Перейти к основному содержимому
Версия: 7.0

Authentication

Authenticationсистемный модуль, объявляющий пользователей приложения и всё, что связано с их входом в систему: классы пользователей и контактов, пароли и токены аутентификации, свойства текущего пользователя, локаль каждого пользователя, среду оформления и цветовую тему, внешних провайдеров аутентификации (LDAP, OAuth2), HTTP-эндпоинты для регистрации и восстановления пароля, действия управления сессией и блокировки объектов. Подключается через REQUIRE Authentication (сам делает REQUIRE Time, Utils).

Среда оформления

Среда оформления — это сущность, относительно которой хранятся персональные настройки интерфейса (раскладка навигатора, цветовая тема). Это либо текущий пользователь, либо текущий компьютер — в зависимости от флага storeNavigatorSettingsForComputer[].

Класс / свойствоЧто это
DesignEnvабстрактный базовый класс сред оформления; от него наследуются Computer и User
currentDesignEnv[]текущая среда оформления: currentComputer[] при установленном storeNavigatorSettingsForComputer[], иначе currentUser[]
ColorThemeстатический класс с двумя объектами, light и dark
designEnvColorTheme[DesignEnv]цветовая тема, выбранная для среды оформления
colorTheme[DesignEnv]итоговая тема: designEnvColorTheme[DesignEnv], если задана, иначе clientColorTheme[DesignEnv]
isDarkTheme[]признак, что colorTheme[DesignEnv] текущей среды равна ColorTheme.dark

name[ColorTheme] возвращает название темы; colorThemeName[DesignEnv] — название выбранной темы. Форма dialogColorThemes показывает две темы для выбора.

Компьютеры

Класс / свойствоЧто это
Computerклиентский компьютер (наследник DesignEnv)
hostname[Computer]имя хоста компьютера
currentComputer[]компьютер текущего соединения
hostnameCurrentComputer[]hostname[Computer] от currentComputer[]

Форма computers показывает компьютеры (с созданием, редактированием и удалением); computersDialog — диалог выбора. Поиск computer[] находит последний компьютер по имени хоста.

Контакты

Contact — абстрактный класс, описывающий человека или организацию, по которым приложение хранит контактные данные. CustomUser наследуется от него, поэтому каждый способный к входу пользователь является и контактом.

СвойствоЧто хранит
firstName[Contact] / lastName[Contact]имя и фамилию
name[Contact]полное имя — firstName[Contact] и lastName[Contact], соединённые пробелом
phone[Contact]телефон
postAddress[Contact]почтовый адрес
birthday[Contact]дату рождения
email[Contact]адрес электронной почты, проверяемый по шаблону почтового адреса
attributes[Contact, STRING]произвольные дополнительные атрибуты по имени

Поиск contact[STRING] находит контакт по адресу почты.

Пользователи

Класс / свойствоЧто это
Userабстрактный базовый класс всех пользователей (наследник DesignEnv)
SystemUserпользователь, от имени которого платформа выполняет внутренние операции
CustomUserобычный пользователь со входом в систему; одновременно Contact
name[User]имя пользователя: фиксированное системное название для SystemUser, имя контакта для CustomUser
login[CustomUser]логин
isLocked[CustomUser]признак, запрещающий пользователю вход

Поиски: customUserLogin[ISTRING] находит пользователя по логину (без учёта регистра), customUserEmail[ISTRING] — по адресу почты, isLockedLogin[ISTRING] сообщает, заблокирован ли пользователь с указанным логином.

Пароли и токены

Свойство / действиеЧто делает
sha256Password[CustomUser]SHA-256-хеш пароля пользователя
changeSHA256Password[CustomUser]запрашивает новый пароль и записывает его хеш в sha256Password[CustomUser]
setSHA256Password[CustomUser, STRING]хеширует переданный пароль и записывает его в sha256Password[CustomUser]
passwordResetToken[CustomUser] / expiryPasswordResetTokenDate[CustomUser]одноразовый токен сброса пароля и время его выдачи
userByPassResetToken[STRING]находит пользователя с указанным токеном сброса
code2FA[CustomUser] / expiry2FA[CustomUser] / lastInitiated2FA[CustomUser]текущий код двухфакторной проверки, срок его действия и время выдачи последнего кода
getAuthToken[]выгружает токен аутентификации текущего запроса (API-действие)
generateAuthToken[User] / generateAuthToken[User, INTEGER]выпускает новый токен аутентификации для пользователя, с необязательным сроком действия в минутах

changeSHA256Password[CustomUser] подключён к форме customUser как обработчик изменения sha256Password[CustomUser]. Токены сброса старше часа очищаются действием clearPassResetToken[].

Текущий пользователь

currentUser[] — пользователь текущего соединения. currentUserName[] — это name[User] этого пользователя, а currentUserLogin[] — его login[CustomUser].

Провайдеры и настройки аутентификации

Модуль хранит настройки внешних механизмов аутентификации.

LDAP: useLDAP[] включает аутентификацию через LDAP; serverLDAP[], portLDAP[], baseDNLDAP[], userDNSuffixLDAP[], allowOnlyBaseDNUsers[], allowOnlyGroupUsers[] — настройки подключения и фильтрации. useDefaultAuthentication[] разрешает откатиться на встроенную парольную аутентификацию, когда LDAP недоступен, а disableEmailLoginFallback[] ограничивает поиск пользователя только логином (без поиска по почте). useServiceUser[], serviceUser[], serviceUserPassword[] задают служебную учётную запись для чтения каталога.

OAuth2 (роль клиента): приложение передаёт вход внешнему провайдеру (Google, GitHub и т. п.). Класс OAuth2 хранит настройку одного провайдера — id[OAuth2], clientId[OAuth2], clientSecret[OAuth2], clientAuthenticationMethod[OAuth2], scope[OAuth2], authorizationUri[OAuth2], tokenUri[OAuth2], jwkSetUri[OAuth2], userInfoUri[OAuth2], userNameAttributeName[OAuth2], clientName[OAuth2]. Поиск auth[STRING] находит провайдера по идентификатору. Действие writeDefaultCredentials[] создаёт стандартные записи провайдеров (GitHub, Google, Facebook, Yandex).

OAuth-сервер авторизации (роль сервера): приложение само выпускает токены, чтобы внешние приложения обращались к его API от имени пользователя.

Класс / свойствоЧто хранит
OAuthClientзарегистрированное внешнее приложение
clientId[OAuthClient] / clientName[OAuthClient]идентификатор и отображаемое имя клиента
redirectURIs[OAuthClient]разрешённые URI перенаправления (по одному на строку)
trusted[OAuthClient]признак, пропускающий для клиента экран согласия
createdAt[OAuthClient]время регистрации
OAuthRefreshTokenвыпущенный токен обновления
token[OAuthRefreshToken] / client[OAuthRefreshToken] / user[OAuthRefreshToken]токен, клиент, которому он выпущен, и пользователь, которого он представляет
expiresAt[OAuthRefreshToken] / revokedAt[OAuthRefreshToken]время истечения и время отзыва (пусто, пока токен действует)
active[OAuthRefreshToken]признак, что expiresAt[OAuthRefreshToken] ещё в будущем, а revokedAt[OAuthRefreshToken] пуст

Поиски oauthClient[STRING] и oauthRefreshToken[STRING] находят клиента и токен обновления по их строковым ключам. Настройки сроков жизни токенов oauthAccessTokenExpiration[], oauthRefreshTokenExpiration[], oauthAuthCodeExpiration[] (в минутах) переопределяют встроенные значения по умолчанию, когда заданы. Форма oauthClient редактирует одного зарегистрированного клиента.

Веб-клиент: webClientSecretKey[] — общий секрет, который веб-клиент предъявляет, чтобы получить настройки провайдеров.

Настройки двухфакторной аутентификации

use2FA[] включает двухфакторную аутентификацию. twoFaRateLimitSeconds[] ограничивает, как часто можно запросить код, twoFaExpirySeconds[] — сколько выданный код действует, а twoFaMaxAttempts[] ограничивает число попыток проверки.

API-действия

Эти действия — HTTP-эндпоинты (помечены @@api); помеченные @@noauth доступны без предварительной аутентификации. Они читают входные данные из JSONFILE и записывают результат через EXPORT FROM.

ДействиеЧто делает
registerUser[JSONFILE]создаёт CustomUser из логина, пароля, имени и почты, проверив надёжность пароля и уникальность логина
resetPassword[JSONFILE]выпускает токен сброса для пользователя, найденного по логину или почте, и отправляет письмо со ссылкой
changePassword[JSONFILE]задаёт новый пароль пользователю с указанным токеном сброса
send2FACode[JSONFILE]генерирует код двухфакторной проверки (с ограничением частоты) и отправляет его письмом
verify2FACode[JSONFILE]сверяет присланный код двухфакторной проверки с сохранённым и его сроком
getClientCredentials[STRING]возвращает настройки провайдеров OAuth2, если переданный секрет совпадает с webClientSecretKey[]
getCurrentUserLocale[]выгружает language[CustomUser] и country[CustomUser] текущего пользователя
syncUsers[ISTRING, JSONFILE]сверяет сохранённые клиентом логины, возвращая те, что существуют и не заблокированы
getAuthToken[]выгружает токен аутентификации текущего запроса

onUserRegister[User] — абстрактный список действий, выполняемых для каждого вновь зарегистрированного пользователя, доступный для расширения.

Политика и надёжность пароля

Свойство / действиеЧто делает
passwordMinLength[]минимальная длина пароля (в группе policyStrengthPassword)
passwordContainsDigits[] / passwordContainsSymbols[] / passwordContainsUpper[]признаки, требующие цифр, специальных символов и заглавных букв
weakPassword[STRING]список невыполненных требований к паролю, либо пусто, если пароль им соответствует
passwordStrength[STRING]числовая оценка надёжности от 0 до 100
checkPasswordStrength[STRING]абстрактное действие, записывающее passwordStrengthError[], когда пароль слишком слаб
changePasswordOnNextLogin[CustomUser]признак, заставляющий сменить пароль при следующем входе
changePassword[CustomUser] / changePassword[]интерактивный диалог смены пароля для указанного (или текущего) пользователя

changePassword[CustomUser] открывает форму changePasswordUser, сверяет старый пароль с sha256Password[CustomUser], проверяет weakPassword[STRING] и совпадение подтверждения, и при успехе записывает новый хеш и снимает changePasswordOnNextLogin[CustomUser].

Настройки локали

Пользователь работает в итоговых языке, стране, часовом поясе, начале двузначного года и формате даты/времени. Каждое значение вычисляется из трёх слоёв: приоритет у собственного значения пользователя, затем значение по умолчанию приложения, затем значение сервера. Слой пользователя, в свою очередь, может уступить значениям, которые сообщает клиент.

Настройки идут параллельными группами:

  • Пользователь (userLanguage[CustomUser], userCountry[CustomUser], userTimeZone[CustomUser], userTwoDigitYearStart[CustomUser], userDateFormat[CustomUser], userTimeFormat[CustomUser]) — заданы явно для пользователя.
  • Клиент (clientLanguage[CustomUser], clientCountry[CustomUser], clientTimeZone[CustomUser], clientDateFormat[CustomUser], clientTimeFormat[CustomUser]) — сообщены клиентом пользователя, используются только при включённом соответствующем флаге: useClientLocale[CustomUser] для языка/страны, useClientTimeZone[CustomUser] для часового пояса, useClientDateTimeFormat[CustomUser] для форматов.
  • По умолчанию (defaultUserLanguage[], defaultUserCountry[], defaultUserTimezone[], defaultUserTwoDigitYearStart[], defaultUserDateFormat[], defaultUserTimeFormat[]) — общий для приложения запасной вариант.
  • Сервер (serverLanguage[], serverCountry[], serverTimezone[], serverTwoDigitYearStart[], serverDateFormat[], serverTimeFormat[]) — последний запасной вариант.

Итоговые значения вычисляются так:

Итоговое свойствоПорядок разрешения
language[CustomUser]язык клиента (при useClientLocale[CustomUser]), затем пользователя, по умолчанию, сервера
country[CustomUser]страна клиента (при useClientLocale[CustomUser] и сообщённом языке клиента), иначе страна первого непустого слоя из пользователя, по умолчанию, сервера
timeZone[CustomUser]часовой пояс клиента (при useClientTimeZone[CustomUser]), затем пользователя, по умолчанию, сервера
dateFormat[CustomUser] / timeFormat[CustomUser]формат клиента (при useClientDateTimeFormat[CustomUser]), затем пользователя, по умолчанию, сервера
twoDigitYearStart[CustomUser]значение пользователя, затем по умолчанию, затем сервера

Управление сессией и пользователем

ДействиеЧто делает
logOut[]завершает сеанс текущего пользователя, опционально перезапуская и переподключая клиент
shutdown[]выход без перезапуска и переподключения
reconnect[]выход с последующим перезапуском и переподключением
restart[]выход с перезапуском (используется действием выхода в навигаторе)
relogin[CustomUser]переаутентифицирует текущее соединение под указанным пользователем

Блокировки объектов

Блокировка фиксирует, какой пользователь удерживает объект, чтобы два пользователя не редактировали его одновременно. locked[Object] — удерживающий пользователь. lock[Object] берёт блокировку в сериализуемой сессии, удаваясь только когда объект ещё не удерживается; unlock[Object] снимает её.

Диапазоны пикеров даты-времени

Каждый пользователь выбирает, какие предопределённые диапазоны показываются в пикерах одиночной даты и интервала дат. isDateTimeRangeSelected[DateTimePickerRanges, CustomUser] и isIntervalRangeSelected[DateTimeIntervalPickerRanges, CustomUser] — признаки выбора по каждому диапазону; больше семи каждого вида выбрать нельзя. setDefaultRanges[CustomUser] включает стандартный начальный набор и выполняется автоматически при создании CustomUser. Сами классы пикеров приходят из Time.

Формы и навигатор

ФормаНазначение
customUserполная форма редактирования одного пользователя (логин, пароль, контакт, локаль, безопасность, диапазоны пикеров)
customUsersадминистративная форма пользователей вместе с настройками локали, LDAP, OAuth2, 2FA, веб-аутентификации, OAuth-сервера и политики паролей
customUsersDialogдиалог выбора пользователя
editProfileсобственный профиль текущего пользователя (логин, имя, почта, язык)
changePasswordUserдиалог смены пароля
computersсписок компьютеров

В навигаторе появляются папка security (внутри System, содержит customUsers и computers) и папка верхнего уровня account с редактором профиля, действием смены пароля и действием выхода.

Язык

  • Заголовок модуля — синтаксис MODULE / REQUIRE; модуль Authentication подключается через REQUIRE Authentication.
  • Оператор DATA — объявляет хранимые свойства пользователей, контактов и настроек.

Связано

  • System modules — общий перечень модулей платформы.
  • Пользовательские классы — что такое абстрактные и статические классы, как их используют User, Contact и ColorTheme.
  • Политика безопасности — как назначаются права доступа объявленным здесь пользователям.
  • Security — отдельный модуль ролей и политик доступа.
  • Service — административные и служебные действия.
  • SystemEvents — события входа и подключения.
  • Time — классы диапазонов пикеров и помощники по дате/времени.