Mecanismos de autenticação empresarial
Nesta página
Visão geral
Neste guia, você aprenderá como autenticar com o MongoDB usando os mecanismos de autenticação disponíveis somente no MongoDB Enterprise Edition. Os mecanismos de autenticação são processos pelos quais o driver e o servidor confirmam a identidade de um cliente para garantir maior segurança antes de se conectar.
Você pode usar os seguintes mecanismos de autenticação com a versão mais recente do MongoDB Enterprise Edition.
Para autenticar usando outro mecanismo, consulte a página de fundamentos do Autenticação Mecanismos . Para obter mais informações sobre como estabelecer uma conexão com seu cluster do MongoDB , consulte o Guia de Conexão.
Você pode especificar o mecanismo de autenticação e as credenciais ao se conectar ao MongoDB usando um dos seguintes métodos:
Uma connection string, também conhecida como URI de conexão, é uma string que informa ao driver como se conectar a um MongoDB deployment e como se comportar enquanto estiver conectado.
Um método de fábrica para o mecanismo de autenticação suportado, contido na classe
MongoCredential
.
Autenticar com GSSAPI/Kerberos
O mecanismo de autenticação GSSAPI (Generic Security Services API) permite que o usuário autentique em um serviço Kerberos usando o nome principal do usuário.
Os exemplos a seguir especificam o mecanismo de autenticação usando os seguintes placeholders:
<username>
: Seu nome principal codificado para URL; por exemplo "nome de usuário%40Realm.ME"<password>
: A senha do usuário Kerberos<hostname>
: O endereço de rede do seu MongoDB Server, acessível pelo seu cliente
Selecione a aba Connection String ou MongoCredential para ver a sintaxe correspondente para especificar o mecanismo de autenticação GSSAPI/Kerberos:
var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authMechanism=GSSAPI");
var credential = MongoCredential.CreateGssapiCredential("<username>", "<password>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Dica
Omissão da Senha
Você pode omitir a senha se uma das seguintes afirmações for verdadeira:
No Windows, o proprietário do processo que executa o aplicativo é o mesmo que o usuário que precisa de autenticação.
No Linux, o usuário inicializou seu keytab via
kinit username@REALM.COM
.
Propriedades adicionais
Você pode especificar propriedades adicionais com seu mecanismo de autenticação utilizando a string de conexão ou um método de fábrica na classe MongoCredential
.
Nome de domínio totalmente qualificado
O exemplo a seguir mostra como usar o servidor DNS para recuperar o nome de domínio totalmente qualificado do host:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=CANONICALIZE_HOSTNAME:true");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_passwordpassword>"); credential = credential.WithMechanismProperty("CANONICALIZE_HOST_NAME", "true"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Realm
O exemplo a seguir mostra como especificar o Realm do usuário quando ele é diferente do Realm do serviço:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Nome do serviço
O exemplo a seguir mostra como especificar o nome do serviço quando ele não é o padrão mongodb
:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_NAME", "<service name>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Várias propriedades
O exemplo a seguir mostra como especificar múltiplas propriedades do mecanismo de autenticação:
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>,SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>") .WithMechanismProperty("SERVICE_NAME", "<service name>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Autenticar com LDAP (PLAIN)
Você pode autenticar em um servidor LDAP (Lightweight Directory Access Protocol) usando seu nome de usuário e senha do servidor de diretórios.
Os exemplos a seguir especificam o mecanismo de autenticação usando os seguintes placeholders:
<username>
: Seu nome de usuário LDAP<password>
: Sua senha LDAP<hostname>
: O endereço de rede do seu MongoDB Server, acessível pelo seu cliente<authenticationDb>
: O banco de dados MongoDB que contém a autenticação do seu usuário
Selecione a aba Connection String ou MongoCredential para ver a sintaxe correspondente para especificar o mecanismo de autenticação LDAP:
var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authSource=<authenticationDb>&authMechanism=PLAIN");
var credential = MongoCredential.CreatePlainCredential("<authenticationDb>", "<username>", "<password>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Dica
O método refere-se a PLAIN em vez de LDAP, pois ele autentica usando o PLAIN Simple Authentication and Security Layer (SASL) definido 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 aplicativo 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 Azure integrado do Driver .NET/C#.
Você pode especificar a autenticação do Azure IMDS OIDC em um objeto MongoClientSettings
usando um objeto MongoCredential
ou como parte da string de conexão. Selecione a aba Connection String ou MongoCredential para ver a sintaxe correspondente.
O seguinte exemplo de código mostra como especificar a autenticação do Azure IMDS OIDC. Substitua o espaço reservado <percent-encoded audience>
pelo valor codificado por porcentagem do parâmetro audience
configurado em sua implantação do MongoDB .
Você não pode passar valores contendo o caractere vírgula (,
) para a opção authMechanismProperties
. Você deve especificar valores que contêm vírgulas em um objeto MongoCredential
, conforme demonstrado na aba MongoCredential .
var connectionString = "mongodb://<db_username>@<hostname>[:<port>]/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
O seguinte exemplo de código mostra como especificar a autenticação do Azure IMDS OIDC. Substitua o espaço reservado <db_username>
pelo ID do cliente ou ID do aplicativo da identidade gerenciada pelo Azure ou do aplicação corporativo. Substitua o espaço reservado <audience>
pelo valor do parâmetro audience
configurado em sua deployment do MongoDB .
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb+srv://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential("azure", "<db_username>") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
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 .NET/C#.
Você pode especificar a autenticação GCP IMDS OIDC em um objeto MongoClientSettings
usando um objeto MongoCredential
ou como parte da string de conexão. Selecione a aba Connection String ou MongoCredential para ver a sintaxe correspondente.
O exemplo de código a seguir mostra como especificar a autenticação GCP IMDS OIDC como parte da string de autenticação. Substitua o espaço reservado <audience>
pelo valor do parâmetro audience
configurado em sua deployment do MongoDB .
Você não pode passar valores contendo o caractere vírgula (,
) para a opção authMechanismProperties
. Você deve especificar valores que contêm vírgulas em um objeto MongoCredential
, conforme demonstrado na aba MongoCredential .
var connectionString = "mongodb://<hostname>[:<port>]/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
O exemplo de código a seguir mostra como especificar a autenticação GCP IMDS OIDC usando um objeto MongoCredential
. Substitua o espaço reservado <audience>
pelo valor do parâmetro audience
configurado em sua deployment do MongoDB .
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb+srv://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential("gcp") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
Chamada de resposta personalizada
O driver .NET/C# 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 classe que implemente a interface IOidcCallback
. Essa interface contém dois métodos:
GetOidcAccessToken()
: este método aceita os parâmetros para o método de chamada de resposta de resposta e retorna a resposta de chamada de resposta de resposta.GetOidcAccessTokenAsync()
: este método é uma versão assíncrona do método anterior.
O código a seguir é um exemplo de implementação da interface IOidcCallback
. Neste exemplo, os métodos recuperam um token OIDC de um arquivo chamado "access-token.dat"
no sistema de arquivos local.
public class MyCallback : IOidcCallback { public OidcAccessToken GetOidcAccessToken( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = File.ReadAllText("access-token.dat"); return new(accessToken, expiresIn: null); } public async Task<OidcAccessToken> GetOidcAccessTokenAsync( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = await File.ReadAllTextAsync( "access-token.dat", cancellationToken) .ConfigureAwait(false); return new(accessToken, expiresIn: null); } }
Depois de definir uma classe que contenha seus métodos de chamada de resposta de chamada personalizados, chame o método MongoCredential.CreateOidcCredential()
e passe uma nova instância de sua classe. Armazene o resultado desta chamada de método na propriedade Credential
do seu objeto MongoClientSettings
, como mostrado no seguinte exemplo de código:
var mongoClientSettings = MongoClientSettings.FromConnectionString("mongodb://<hostname>[:port]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new MyCallback()); var client = new MongoClient(mongoClientSettings);
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: