logologo
Começar
Manual
Desenvolvimento
Plugins
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Começar
Manual
Desenvolvimento
Plugins
API
logologo

Autenticação de Usuário

Visão Geral
Gerenciamento de Autenticadores

Tipos de Autenticação

Senha
SMS

OIDC

Configurações

Exemplos

Login com Google
Login com Microsoft

SAML

Configurações

Exemplos

Login com Google
LDAP
CAS
WeCom
DingTalk
Chave de API

Guia de Desenvolvimento

Estender Tipos de Autenticação
Referência da API

Verificação

Visão Geral

Tipos de Verificação

SMS
Autenticador TOTP

Guia de Desenvolvimento

Estender Tipos de Verificação
Estender Cenários de Verificação
Estender Provedor de SMS
Referência da API
Autenticação de Dois Fatores (2FA)
Next PageVisão Geral
Aviso de tradução por IA

Esta documentação foi traduzida automaticamente por IA.

#Estender Tipos de Autenticação

#Visão Geral

O NocoBase permite que você estenda os tipos de autenticação de usuário conforme a sua necessidade. Geralmente, a autenticação de usuário se divide em dois tipos: um em que a identidade do usuário é verificada dentro do próprio aplicativo NocoBase (como login por senha, login por SMS, etc.); e outro em que serviços de terceiros verificam a identidade do usuário e notificam o aplicativo NocoBase do resultado através de callbacks (como métodos de autenticação OIDC, SAML, etc.). O processo de autenticação para esses dois tipos diferentes no NocoBase é basicamente o seguinte:

#Sem Dependência de Callbacks de Terceiros

  1. O cliente utiliza o SDK do NocoBase para chamar a interface de login api.auth.signIn(), solicitando a interface de login auth:signIn. Ao mesmo tempo, ele envia o identificador do autenticador em uso no cabeçalho da requisição X-Authenticator para o backend.
  2. A interface auth:signIn, com base no identificador do autenticador presente no cabeçalho da requisição, encaminha a solicitação para o tipo de autenticação correspondente. O método validate da classe de autenticação registrada para esse tipo então realiza o processamento lógico adequado.
  3. O cliente recebe as informações do usuário e o token de autenticação da resposta da interface auth:signIn, salva o token no Local Storage e conclui o login. Esta etapa é tratada automaticamente internamente pelo SDK.

#Com Dependência de Callbacks de Terceiros

  1. O cliente obtém a URL de login de terceiros através de uma interface registrada por ele mesmo (por exemplo, auth:getAuthUrl), e envia informações como o nome do aplicativo e o identificador do autenticador, conforme o protocolo.
  2. Redireciona para a URL de terceiros para completar o login. O serviço de terceiros chama a interface de callback do aplicativo NocoBase (que precisa ser registrada por você, por exemplo, auth:redirect), retorna o resultado da autenticação e também o nome do aplicativo, o identificador do autenticador, entre outras informações.
  3. No método da interface de callback, os parâmetros são analisados para obter o identificador do autenticador. Em seguida, a classe de autenticação correspondente é obtida através do AuthManager, e o método auth.signIn() é chamado ativamente. O método auth.signIn() por sua vez chamará o método validate() para lidar com a lógica de autenticação.
  4. Após o método de callback obter o token de autenticação, ele redireciona (com status 302) de volta para a página do frontend, levando o token e o identificador do autenticador nos parâmetros da URL, como ?authenticator=xxx&token=yyy.

A seguir, vamos explicar como registrar interfaces do lado do servidor e interfaces de usuário do lado do cliente.

#Servidor

#Interface de Autenticação

O kernel do NocoBase oferece o registro e o gerenciamento para estender os tipos de autenticação. Para implementar a lógica central de um plugin de login estendido, você precisa herdar a classe abstrata Auth do kernel e implementar as interfaces padrão correspondentes.
Para a API completa, consulte Auth.

import { Auth } from '@nocobase/auth';

class CustomAuth extends Auth {
  set user(user) {}
  get user() {}

  async check() {}
  async signIn() {}
}

O kernel também registra operações básicas de recursos relacionadas à autenticação de usuário.

APIDescrição
auth:checkVerifica se o usuário está logado
auth:signInFazer login
auth:signUpRegistrar
auth:signOutSair da conta

Na maioria dos casos, os tipos de autenticação de usuário estendidos podem reutilizar a lógica de autenticação JWT existente para gerar credenciais de acesso à API para o usuário. A classe BaseAuth no kernel oferece uma implementação básica da classe abstrata Auth. Consulte BaseAuth. Os plugins podem herdar diretamente a classe BaseAuth para reutilizar parte do código lógico e reduzir os custos de desenvolvimento.

import { BaseAuth } from '@nocobase/auth';

class CustomAuth extends BaseAuth {
  constructor(config: AuthConfig) {
    // Define a coleção de usuários
    const userCollection = config.ctx.db.getCollection('users');
    super({ ...config, userCollection });
  }

  // Implementa a lógica de autenticação do usuário
  async validate() {}
}

#Dados do Usuário

Ao implementar a lógica de autenticação de usuário, geralmente há o tratamento de dados do usuário. Em um aplicativo NocoBase, as coleções relacionadas são definidas por padrão da seguinte forma:

ColeçõesDescriçãoPlugin
usersArmazena informações do usuário, como e-mail, apelido e senhaPlugin de Usuário (@nocobase/plugin-users)
authenticatorsArmazena informações do autenticador (entidade do tipo de autenticação), correspondendo ao tipo e configuraçãoPlugin de Autenticação de Usuário (@nocobase/plugin-auth)
usersAuthenticatorsAssocia usuários e autenticadores, salva informações do usuário sob o autenticador correspondentePlugin de Autenticação de Usuário (@nocobase/plugin-auth)

Geralmente, para métodos de login estendidos, você pode usar as coleções users e usersAuthenticators para armazenar os dados do usuário. Apenas em casos especiais será necessário adicionar uma nova coleção.

Os principais campos de usersAuthenticators são:

CampoDescrição
uuidIdentificador único do usuário para este tipo de autenticação, como número de telefone ou ID de usuário de serviço de terceiros
metaCampo JSON, outras informações a serem salvas
userIdID do usuário
authenticatorNome do autenticador (identificador único)

Para operações de consulta e criação de usuários, o modelo de dados AuthModel dos authenticators também encapsula vários métodos que podem ser usados na classe CustomAuth através de this.authenticator[nomeDoMetodo]. Para a API completa, consulte AuthModel.

import { AuthModel } from '@nocobase/plugin-auth';

class CustomAuth extends BaseAuth {
  async validate() {
    // ...
    const authenticator = this.authenticator as AuthModel;
    this.authenticator.findUser(); // Consulta o usuário
    this.authenticator.newUser(); // Cria um novo usuário
    this.authenticator.findOrCreateUser(); // Consulta ou cria um novo usuário
    // ...
  }
}

#Registro de Tipo de Autenticação

O método de autenticação estendido precisa ser registrado no módulo de gerenciamento de autenticação.

class CustomAuthPlugin extends Plugin {
  async load() {
    this.app.authManager.registerTypes('custom-auth-type', {
      auth: CustomAuth,
    });
  }
}

#Cliente

A interface de usuário do cliente é registrada através da interface registerType fornecida pelo cliente do plugin de autenticação de usuário:

import AuthPlugin from '@nocobase/plugin-auth/client';

class CustomAuthPlugin extends Plugin {
  async load() {
    const auth = this.app.pm.get(AuthPlugin);
    auth.registerType('custom-auth-type', {
      components: {
        SignInForm, // Formulário de login
        SignInButton, // Botão de login (terceiro), pode ser uma alternativa ao formulário de login
        SignUpForm, // Formulário de registro
        AdminSettingsForm, // Formulário de configurações do administrador
      },
    });
  }
}

#Formulário de Login

Se vários autenticadores, correspondentes a diferentes tipos de autenticação, tiverem formulários de login registrados, eles serão exibidos em formato de abas (Tabs). O título da aba será o título do autenticador configurado no painel administrativo.

#Botão de Login

Geralmente é um botão de login de terceiros, mas pode ser qualquer componente.

#Formulário de Registro

Se você precisar navegar da página de login para a página de registro, precisará lidar com isso por conta própria no componente de login.

#Formulário de Configurações do Administrador

A parte superior mostra a configuração genérica do autenticador, e a parte inferior é a seção do formulário de configuração personalizada que pode ser registrada.

#Requisições de API

Para iniciar requisições de interfaces relacionadas à autenticação de usuário no lado do cliente, você pode usar o SDK fornecido pelo NocoBase.

import { useAPIClient } from '@nocobase/client';

// usar em um componente
const api = useAPIClient();
api.auth.signIn(data, authenticator);

Para referências detalhadas da API, consulte @nocobase/sdk - Auth.