Mecanismos de autenticação empresarial
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
.
Kerberos (GSSAPI/SSPI)
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
paraGSSAPI
.Configure o valor
SERVICE_NAME
no parâmetroauthMechanismProperties
se utilizar um valor diferente demongodb
.Especifique um valor
SERVICE_REALM
no parâmetroauthMechanismProperties
se um realm do serviço personalizado for exigido.Especifique um valor
CANONICALIZE_HOST_NAME
no parâmetroauthMechanismProperties
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 hostforward
: Executa uma pesquisa de DNS direta para canonicalizar o nome do hostforwardAndReverse
: 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.
LDAP (PLAIN)
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.
MONGODB-OIDC
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.
IMDS do Azure
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 comoMONGODB-OIDC
.authMechanismProperties
: Defina comoENVIRONMENT:azure,TOKEN_RESOURCE:<audience>
. Substitua o espaço reservado<audience>
pelo valor do parâmetroaudience
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);
GCP IMDS
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 comoMONGODB-OIDC
.authMechanismProperties
: Defina comoENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>
. Substitua o espaço reservado<audience>
pelo valor do parâmetroaudience
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);
Chamada de resposta personalizada
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 } });
Documentação da API
Para saber mais sobre os métodos e tipos discutidos neste guia, consulte a seguinte documentação da API: