Авторизация¶
Управление доступными способами входа на форме авторизации определяет пользовательский ключ AuthConfig.
По умолчанию ключ отображается пустым: {"AuthTypes":[]}
Пример значения:
{"AuthTypes": [{"Type": "phone-code", "IsDefault": true, "AllowRegister": true, "AutoRegister": true, "PrivacyLink": null, "HideProviders": true, "Visibility": "all", "RegisterPrivacyLink": null, "RegistrationType": "email"}, { "Type": "email-code", "IsDefault": false, "AllowRegister": false, "AutoRegister": true, "PrivacyLink": null, "HideProviders": true, "Visibility": "mobile", "RegisterPrivacyLink": null, "RegistrationType": "email"}, {"Type": "login-pass", "IsDefault": true, "AllowRegister": true, "AutoRegister": false, "PrivacyLink": null, "HideProviders": false, "Visibility": "web", "RegisterPrivacyLink": null, "RegistrationType": "phone"}]}
-PrivacyLink — Ссылка на пользовательское соглашение, которое запрашивается при входе. Указывается в двойных кавычках. Если параметр не пустой, на экране отображается обязательная опция "Я принимаю условия пользовательского соглашения" с указанной ссылкой. Пользовательское соглашение, которое запрашивается при регистрации, задается в параметре RegisterPrivacyLink. -HideProviders — Скрыть провайдеры. Если параметр принимает значение true, то при открытии способа входа или регистрации выбор провайдера будет недоступен. -Visibility — Возможность отображать данный тип авторизации для всех устройств (значение по умолчанию), только для веб-версии или только для мобильной версии. Возможные значения: all, mobile, web. -RegisterPrivacyLink — Пользовательское соглашение, которое запрашивается при регистрации. Принимает массив из двух параметров: olinkUrl — Ссылка на пользовательское соглашение. Указывается в двойных кавычках. olinkTitle — Текст пользовательского соглашения. Если текст не задан, по умолчанию используется "Я принимаю условия пользовательского соглашения". При необходимости может быть задано множество ссылок. Пример шаблона:
"RegisterPrivacyLink": [
{
"linkUrl": "https://{URL}",
"linkTitle": "Ссылка 1"
},
{
"linkUrl": "https://{URL}",
"linkTitle": "Ссылка 2"
},
{
"linkUrl": "https://{URL}",
"linkTitle": "Ссылка 3"
}
]
ℹ️ Параметры в AuthTypes обязательно должны быть указаны с заглавной буквы
Настройка имеет в системе больший приоритет для отображения кнопки регистрации. Если в ключе регистрация отключена, она не будет доступна даже при активной опции Разрешена регистрация, вход по номеру телефона в общих настройках приложения.
Вход по почте¶
Пользователь вводит адрес почты, который указан у него в профиле и нажимает кнопку Далее. На указанный адрес поступит 4-значный код, который необходимо будет ввести в системе. Если код введен корректно будет совершен вход в систему.
Для корректного входа по почте в профиле пользователя обязательно должен быть добавлен почтовый ящик, а в общих настройках приложения должен быть выбран Почтовый ящик для системных писем и настроен SMTP сервер.
Вход по номеру¶
Пользователь вводит номер телефона, нажимает кнопку Далее. На указанный номер поступит 4-значный код, который необходимо будет ввести в системе. Если код введен корректно будет совершен вход в систему.
ℹ️ Для корректного входа по номеру должен быть настроен SMS провайдер
Приоритетный вход через внешнего провайдера¶
Если в AuthConfig указан тип external-provider с параметром IsDefault в значении true, на странице входа первым отображается экран с кнопками настроенных внешних провайдеров аутентификации. Форма логина и пароля, капча и выбор провайдера на этом экране не показываются.
Внизу экрана отображается ссылка «Войти по логину и паролю». По клику на неё открывается стандартная форма входа по логину и паролю с кнопкой «Назад» для возврата к экрану внешних провайдеров.
Если в массиве AuthTypes присутствует только external-provider без login-pass, ссылка «Войти по логину и паролю» не отображается.
Если AuthConfig не задан или в массиве AuthTypes отсутствует тип external-provider, поведение страницы входа не меняется.
Пример конфигурации:
{"AuthTypes": [{"Type": "external-provider", "IsDefault": true, "AllowRegister": false, "AutoRegister": false, "PrivacyLink": null, "RegisterPrivacyLink": null, "HideProviders": false, "Visibility": "all", "RegistrationType": "all"}, {"Type": "login-pass", "IsDefault": false, "AllowRegister": false, "AutoRegister": false, "PrivacyLink": null, "RegisterPrivacyLink": null, "HideProviders": false, "Visibility": "all", "RegistrationType": "all"}]}
Время жизни кода подтверждения
В системе авторизации реализовано ограничение по времени жизни кода подтверждения. Код регистрации действует в течение заданного в настройках периода, который по умолчанию составляет 24 часа. Это ограничение применяется ко всем кодам в системе, включая как коды регистрации, так и коды аутентификации. При попытке использования кода с истекшим сроком действия система возвращает ошибку "Неверный код". Время жизни кода настраивается в конфигурационном файле приложения appsettings.json в параметре AuthLoginCodeExpiresInMinutes.
Возможные ошибки при входе в систему¶
Вы превысили лимит попыток входа и Ваша учетная запись была заблокирована. Обратитесь к администратору
Данная ошибка на форме авторизации может возникнуть из-за работы механизма блокировки при множественных попытках входа. Проблема связана с тем, что все запросы от разных пользователей, проходящие через балансировщик нагрузки (load balancer), воспринимаются как действия с одного IP-адреса, что может привести к быстрому заполнению служебной таблицы iplist и массовой блокировке доступа. Механизм блокировки должен срабатывать индивидуально только в случае превышения лимита попыток входа с конкретного адреса.
Для решения этой проблемы балансировщик нагрузки должен передавать реальные IP-адреса каждого пользователя в специальных заголовках (X-Real-IP, X-Forwarded-Proto). В конфигурационном файле appsettings.json для этого обязательно должно быть настроено чтение этих заголовков:
"ForwardHeaders": {
"Headers": "For,Proto,Host,Prefix",
"Networks": "*",
"Proxies": "*"
}