Visão geral
O mecanismo de autenticação OpenID Connect (OIDC) permite que você autentique no MongoDB usando um provedor de identidade de terceiros, como o Azure ou o Google Cloud Platform (GCP).
Você pode usar esse mecanismo somente ao autenticar para MongoDB Atlas ou Enterprise Advanced e somente ao autenticar para MongoDB v7.0 ou posterior.
Dica
Autenticação OIDC
Para saber mais sobre como configurar o MongoDB Atlas para autenticação OIDC, consulte Configurar Federação de Identidade da Força de Trabalho com OIDC na documentação do Atlas .
Para obter mais informações sobre o uso da autenticação OIDC com o MongoDB, consulte Autenticação do OpenID Connect e Parâmetros do MongoDB Server no manual do MongoDB Server .
Espaços reservados de código
Os exemplos de código nesta página usam os seguintes espaços reservados:
+srv: inclua essa opção no prefixo da string de conexão somente se estiver se conectando a um cluster MongoDB Atlas . Para saber mais sobre a+srvopção, consulte Formatos de connection string no manual do MongoDB Server .<username>: o ID do cliente ou do ID do aplicativo de identidade gerenciada pelo Azure ou do aplicação empresarial , se estiver autenticando no Azure IMDS.<hostname>: O endereço de rede da sua implantação MongoDB .<port>: o número da porta da sua implantação do MongoDB . Se você omitir este parâmetro, o driver utilizará o número de porta padrão (27017). Você não precisa especificar uma porta ao se conectar a um cluster MongoDB Atlas .<audience>: O parâmetro de público configurado em sua implementação do MongoDB .
Para usar os exemplos de código nesta página, substitua esses espaços reservados por seus próprios valores.
Usando a autenticação OIDC em seu aplicativo
As seções a seguir descrevem como usar a autenticação OIDC para autenticar de várias plataformas.
IMDS do Azure
Se o seu aplicação for executado em uma VM do Azure ou de outra forma usar o Azure Instance Metadata Service (IMDS), você poderá autenticar no MongoDB usando o suporte integrado do Azure 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 .
var connectionString = "mongodb://<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:
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential .CreateOidcCredential("azure", "<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 integrado a GCP .NET/C# Driver.
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 seguinte exemplo de código mostra como especificar a autenticação GCP IMDS OIDC como parte da string de autenticação:
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 :
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential .CreateOidcCredential("gcp") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
Kubernetes
Se seu aplicação for executado em um cluster Kubernetes, você poderá autenticar no MongoDB usando o suporte integrado ao Kubernetes do driver .NET/C#.
Você pode especificar a autenticação OIDC do Kubernetes 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 Kubernetes OIDC como parte da string de conexão:
var connectionString = "mongodb://<hostname>[:<port>]/?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s"; var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
O seguinte exemplo de código mostra como especificar a autenticação do Kubernetes OIDC usando um objeto MongoCredential :
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential .CreateOidcCredential("k8s") var client = new MongoClient(mongoClientSettings);
Se você especificar Kubernetes OIDC como o mecanismo de autenticação, o driver lerá o conteúdo do token OIDC de um dos seguintes locais:
AZURE_FEDERATED_TOKEN_FILEvariável de ambiente para aplicativos em execução no Azure Kubernetes Service (AKS)AWS_WEB_IDENTITY_TOKEN_FILEvariável de ambiente para aplicativos em execução no Elastic Kubernetes Service (EKS)/var/run/secrets/kubernetes.io/serviceaccount/tokenarquivo, o local padrão para todos os outros aplicativos, incluindo aqueles que são executados no Google Kubernetes Engine (GKE)
Você deve armazenar seu token OIDC no local que corresponde ao serviço que você usa para executar seu aplicação.
Chamada de resposta personalizada
O driver .NET/C# não oferece suporte integrado para todas as plataformas, incluindo Azure Functions. Em vez disso, você deve definir um 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 nesta página, consulte a seguinte documentação da API: