Эта документация была автоматически переведена ИИ.
Расширение типов аутентификации
Обзор
NocoBase позволяет расширят ь типы аутентификации пользователей по мере необходимости. Обычно существует два основных типа аутентификации пользователей: первый — это определение личности пользователя непосредственно в приложении NocoBase (например, вход по паролю, вход по SMS и т.д.); второй — это когда сторонние сервисы определяют личность пользователя и уведомляют приложение NocoBase о результате через обратный вызов (например, методы аутентификации OIDC, SAML и т.д.). Процесс аутентификации для этих двух различных типов в NocoBase выглядит следующим образом:
Без использования сторонних обратных вызовов
- Клиент использует NocoBase SDK для вызова интерфейса входа
api.auth.signIn(), отправляя запрос на интерфейсauth:signIn. При этом идентификатор текущего аутентификатора передается на бэкенд через заголовок запросаX-Authenticator. - Интерфейс
auth:signInперенаправляет запрос соответствующему типу аутентификации на основе идентификатора аутентификатора в заголовке запроса. Методvalidateв классе аутентификации, зарегистрированном для этого типа, выполняет соответствующую логическую обработку. - Клиент получает информацию о пользователе и токен аутентификации из ответа интерфейса
auth:signIn, сохраняет токен в Local Storage и завершает вход. Этот шаг автоматически обрабатывается внутри SDK.
С использованием сторонних обратных вызовов
- Клиент получает URL для входа через сторонний сервис, используя собственный зарегистрированный интерфейс (например,
auth:getAuthUrl), и передает информацию, такую как имя приложения и идентификатор аутентификатора, в соответствии с протоколом. - Происходит перенаправление на URL стороннего сервиса для завершения входа. Сторонний сервис вызывает интерфейс обратного вызова приложения NocoBase (который необходимо зарегистрировать самостоятельно, например,
auth:redirect), возвращает результат аутентификации, а также информацию, такую как имя приложения и идентификатор аутентификатора. - Метод интерфейса обратного вызова анализирует параметры для получения идентификатора аутентификатора, затем через
AuthManagerполучает соответствующий класс аутентификации и активно вызывает методauth.signIn(). Методauth.signIn()в свою очередь вызывает методvalidate()для обработки логики авторизации. - Метод обратного вызова получает токен аутентификации, затем выполняет перенаправление (302) обратно на клиентскую страницу, передавая
tokenи идентификатор аутентификатора в параметрах URL, например,?authenticator=xxx&token=yyy.
Далее мы рассмотрим, как зарегистрировать серверные интерфейсы и клиентские пользовательские интерфейсы.
Серверная часть
Интерфейс аутентификации
Ядро NocoBase предоставляет возможности для регистрации и управления расширенными типами аутентификации. Основная логика обработки для расширения плагина входа требует наследования от абстрактного класса Auth ядра и реализации соответствующих стандартных интерфейсов.
Полную информацию об API см. в Auth.
Ядро также регистрирует базовые операции с ресурсами, связанные с аутентификацией пользователей.
В большинстве случаев расширенный тип аутентификации пользователей может также использовать существующую логику аутентификации JWT для генерации учетных данных для доступа пользователя к API. Класс BaseAuth в ядре предоставляет базовую реализацию абстрактного класса Auth. См. BaseAuth. Плагины могут напрямую наследовать класс BaseAuth для повторного использования части логического кода и снижения затрат на разработку.
Пользовательские данные
При реализации логики аутентификации пользователей обычно требуется обработка пользовательских данных. В приложении NocoBase соответствующие коллекции по умолчанию определены следующим образом:
Как правило, для расширенных методов входа достаточно использовать users и usersAuthenticators для хранения соотв етствующих пользовательских данных. Только в особых случаях требуется самостоятельно добавлять новую коллекцию.
Основные поля коллекции usersAuthenticators:
Для операций запроса и создания пользователей модель данных AuthModel коллекции authenticators также инкапсулирует несколько методов, которые можно использовать в классе CustomAuth через this.authenticator[имяМетода]. Полную информацию об API см. в AuthModel.
Регистрация типа аутентификации
Расширенный метод аутентификации необходимо зарегистрировать в модуле управления аутентификацией.
Клиентская часть
Пользовательский интерфейс клиентской части регистрируется через интерфейс registerType, предоставляемый клиентской частью плагина аутентификации пользователей:
Форма входа

Если несколько аутентификаторов, соответствующих типам аутентификации, зарегистрировали формы входа, они будут отображаться в виде вкладок. Заголовок вкладки будет соответствовать названию аутентификатора, настроенного в бэкенде.

Кнопка входа

Обычно это кнопка входа через сторонний сервис, но фактически это может быть любой компонент.
Форма регистрации

Если вам нужно перейти со страницы входа на страницу регистрации, это необходимо обработать самостоятельно в компоненте входа.

