Menu Docs
Página inicial do Docs
/ / /
Controlador Node.js
/ /

Mecanismos de autenticação empresarial

Nesta página

  • Kerberos (GSSAPI/SSPI)
  • LDAP (PLAIN)
  • MONGODB-OIDC
  • Documentação da API

Neste guia, você pode encontrar código de exemplo para conexão ao MongoDB com cada mecanismo de autenticação disponível no MongoDB Enterprise Edition: Kerberos (GSSAPI/SSPI), LDAP (PLAIN) e MONGODB-OIDC.

Observação

O driver do Node.js suporta Kerberos no UNIX utilizando a biblioteca MIT Kerberos e no Windows utilizando a API SSLI.

O mecanismo de autenticação do GSSAPI utiliza seu principal de usuário para autenticar em um serviço Kerberos.

Você pode especificar esse mecanismo de autenticação executando as seguintes ações ao especificar opções em suaconnection string :

  • Configure o parâmetro authMechanism para GSSAPI.

  • Configure o valor SERVICE_NAME no parâmetro authMechanismProperties se utilizar um valor diferente de mongodb.

  • Especifique um valor SERVICE_REALM no parâmetro authMechanismProperties se um realm do serviço personalizado for exigido.

  • Especifique um valor CANONICALIZE_HOST_NAME no parâmetro authMechanismProperties se a canonicalização do nome do host for necessária. Esta propriedade pode assumir os seguintes valores:

    • none: (padrão) Não executa canonicalização de nome de host

    • forward: Executa uma pesquisa de DNS direta para canonicalizar o nome do host

    • forwardAndReverse: Executa uma pesquisa de DNS encaminhada e, em seguida, uma pesquisa reversa sobre esse valor para canonicalizar o nome do host

Importante

O parâmetro gssapiServiceName é preterido e pode ser removido em futuras versões do driver. Em vez disso, use authMechanismProperties=SERVICE_NAME:<your service name> no URI de conexão. Consulte a documentação do parâmetro authMechanismProperties para obter mais informações.

A seguinte amostra de código autentica para Kerberos para UNIX utilizando GSSAPI.

Importante

Sempre codifique o URI do principal usando o método encodeURIComponent para garantir que ele seja analisado corretamente.

const { MongoClient } = require("mongodb");
// specify the placeholder values for your environment in the following lines
const clusterUrl = "<MongoDB cluster URL>";
const principal = encodeURIComponent("<Kerberos principal and realm>");
const serviceRealm = "<Kerberos service realm>";
const canonicalizationSetting = "<canonicalization setting>";
const authMechanismProperties = `SERVICE_REALM:${serviceRealm},CANONICALIZE_HOST_NAME:${canonicalizationSetting}`;
const authMechanism = "GSSAPI";
// Connection URI
const uri = `mongodb+srv://${principal}@${clusterUrl}/?authMechanism=${authMechanism}&authMechanismProperties=${authMechanismProperties}`;
const client = new MongoClient(uri);
// Function to connect to the server
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

Observação

O método refere-se ao GSSAPI mecanismo de autenticação em vez de Kerberos porque o driver autentica por meio do GSSAPI RFC-4652, o mecanismo SASL.

O mecanismo de autenticação do PLAIN utiliza seu nome de usuário e senha para autenticar em um servidor LDAP (Lightweight Directory Access Protocol).

Você pode especificar esse mecanismo de autenticação definindo o parâmetro authMechanism como PLAIN e incluindo seu nome de usuário e senha do LDAP na connection string , conforme mostrado no código de exemplo a seguir.

const { MongoClient } = require("mongodb");
// specify the placeholder values for your environment in the following lines
const clusterUrl = "<MongoDB cluster URL>";
const ldapUsername = "<LDAP username>";
const ldapPassword = "<LDAP password>";
const authMechanism = "PLAIN";
// Connection URI
const uri = `mongodb+srv://${ldapUsername}:${ldapPassword}@${clusterUrl}/?authMechanism=${authMechanism}`;
const client = new MongoClient(uri);
// Function to connect to the server
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

Observação

O mecanismo de autenticação é nomeado PLAIN em vez de LDAP , pois autentica usando a camada simples de autenticação e segurança PLAIN (SASL) definida em RFC-4616.

Importante

O mecanismo de autenticação MONGODB-OIDC requer MongoDB Server v7.0 ou posterior em execução em uma plataforma Linux.

As seções a seguir descrevem como usar o mecanismo de autenticação de autenticação MONGODB-OIDC para autenticar de várias plataformas.

Para obter mais informações sobre o mecanismo de autenticação MONGODB-OIDC, consulte Autenticação do OpenID Connect e MongoDB Server do MongoDB Server no manual do Servidor MongoDB.

Se seu aplicação for executado em uma VM do Azure ou usar o Serviço de Metadados de Instância do Azure (IMDS), você pode autenticar no MongoDB usando o suporte interno do Azure do driver do Node.js

Para especificar o Azure IMDS OIDC como o mecanismo de autenticação, defina as seguintes opções em sua string de conexão:

  • username: Se você estiver usando uma identidade gerenciada pelo Azure, defina para a ID do cliente da identidade gerenciada. Se você estiver usando um principal de serviço para representar um aplicação empresarial, defina para o ID do aplicativo do principal de serviço. Caso contrário, omita esta opção.

  • authMechanism: Defina como MONGODB-OIDC.

  • authMechanismProperties: Defina como ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>. Substitua o espaço reservado <audience> pelo valor do parâmetro audience configurado em sua deployment do MongoDB .

O seguinte exemplo de código mostra como definir as opções de conexão anteriores:

const { MongoClient } = require("mongodb");
const uri = "mongodb+srv://<username>@<hostname>:<port>/?authMechanism=MONGODB-OIDC"
+ "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>";
const client = new MongoClient(uri);

Se seu aplicação é executado em uma VM do Google Compute Engine ou usa o Serviço de Metadados de Instância GCP, você pode autenticar no MongoDB usando o suporte GCP integrado do driver do Node.js

Para especificar o GCP IMDS OIDC como o mecanismo de autenticação, defina as seguintes opções em sua string de conexão:

  • authMechanism: Defina como MONGODB-OIDC.

  • authMechanismProperties: Defina como ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>. Substitua o espaço reservado <audience> pelo valor do parâmetro audience configurado em sua deployment do MongoDB .

O seguinte exemplo de código mostra como definir as opções de conexão anteriores:

const { MongoClient } = require("mongodb");
const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC"
+ "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>";
const client = new MongoClient(uri);

O driver Node.js não oferece suporte integrado para todas as plataformas, incluindo Azure Functions e Azure Kubernetes Service (AKS). Em vez disso, você deve definir um retorno de chamada de resposta personalizado para usar o OIDC para autenticar a partir dessas plataformas.

Primeiro, defina uma função que recupera o token de acesso a ser usado para autenticação OIDC. Esta função deve ter a seguinte assinatura:

const myCallback = (params: OIDCCallbackParams): Promise<OIDCResponse> => { }

O parâmetro OIDCCallbackParams contém as seguintes propriedades, que você pode acessar dentro da função:

Propriedade
Valor
timeoutContext
Um AbortSignal que cancela o fluxo de trabalho de autenticação após 30 segundos
version
A versão atual da API do OIDC
idpInfo
As informações do provedor de identidade retornadas do servidor
username
O nome de usuário incluído na string de conexão, se houver
refreshToken
O token de atualização para solicitar um novo token de acesso do emissor, se houver

A função de chamada de resposta de resposta deve retornar um objeto OIDCResponse . Este objeto contém as seguintes propriedades:

Propriedade
Valor
accessToken
O token de acesso a ser usado para autenticação.
expiresInSeconds
Opcional. O número de segundos até que o token de acesso expire.
refreshToken
Opcional. O token de atualização para solicitar um novo token de acesso do emissor.

O exemplo a seguir mostra uma função de chamada de resposta de chamada que recupera um token de acesso OIDC de um arquivo chamado access-token.dat no sistema de arquivos local:

const fs = require("node:fs");
const myCallback = (params: OIDCCallbackParams): Promise<OIDCResponse> => {
const token = fs.readFileSync("access-token.dat", "utf8");
return {
accessToken: token,
expiresInSeconds: 300,
refreshToken: token
};
}

Depois de definir sua função de chamada de resposta de chamada, passe-a para o construtor MongoClient como parte do parâmetro authMechanismProperties . O driver Node.js é compatível com os seguintes padrões de autenticação:

  • Autenticação de máquina: usada por serviços da web e outros aplicativos que não exigem interação humana. Selecione a aba Machine Callback para ver um exemplo desta sintaxe.

  • Autenticação humana: usada por ferramentas de banco de dados de dados, utilitários de linha de comando e outros aplicativos que envolvem interação humana direta. Selecione a aba Human Callback para ver um exemplo desta sintaxe.

Para autenticação de máquina, atribua a função de chamada de resposta de chamada à propriedade authMechanismProperties.OIDC_CALLBACK , conforme mostrado no exemplo a seguir:

const { MongoClient } = require("mongodb");
const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC";
const client = new MongoClient(uri, {
authMechanismProperties: {
OIDC_CALLBACK: myCallback
}
});

Para autenticação humana, atribua a função de chamada de resposta de chamada à propriedade authMechanismProperties.OIDC_HUMAN_CALLBACK , conforme mostrado no exemplo a seguir:

const { MongoClient } = require("mongodb");
const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC";
const client = new MongoClient(uri, {
authMechanismProperties: {
OIDC_HUMAN_CALLBACK: myCallback
}
});

Para saber mais sobre os métodos e tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Mecanismos de autenticação