Menu Docs
Página inicial do Docs
/ / /
C#/.NET
/

Mecanismos de autenticação empresarial

Nesta página

  • Visão geral
  • Autenticar com GSSAPI/Kerberos
  • Propriedades adicionais
  • Autenticar com LDAP (PLAIN)
  • MONGODB-OIDC
  • IMDS do Azure
  • GCP IMDS
  • Chamada de resposta personalizada
  • Documentação da API

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.

  • GSSAPI/Kerberos

  • LDAP (Plain)

  • MONGODB-OIDC

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 .

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:

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.

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 .

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);

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);

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);

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);

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.

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 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);

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);

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);

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Autenticação