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).
Importante
O mecanismo de autenticação MONGODB-OIDC requer MongoDB Server v7.0 ou posterior em execução em uma plataforma Linux.
Para saber mais sobre como configurar o MongoDB Atlas para autenticação OIDC, consulte Configurar a 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 Authentication and Authorization with OIDC/OAuth 2.0 e oidcIdentityProviders 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:
<username>: O ID do cliente ou ID do aplicativo da identidade gerenciada Azure ou do aplicação empresarial . Usado para autenticação 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 de um número de porta ao se conectar a um cluster MongoDB Atlas .<audience>ou<percent-encoded audience>: o valor do parâmetro de servidoraudienceconfigurado em sua implantação do MongoDB . Porcentagem Codifique esse valor ao especificá-lo em uma string de conexão.
Para usar os exemplos de código, substitua esses espaços reservados por seus próprios valores.
Especifique a autenticação OIDC
As seções a seguir descrevem como autenticar de várias plataformas usando o OIDC.
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 Java Reactive Streams.
Você pode especificar a autenticação do Azure IMDS OIDC utilizando um MongoCredential ou como parte da string de conexão.
Selecione nas abas Connection String ou MongoCredential para ver a sintaxe correspondente:
Para especificar o Azure 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:azure,TOKEN_RESOURCE:<url-encoded-resource>.
Substitua o espaço reservado <username> pelo ID do cliente ou ID do aplicativo da identidade gerenciada pelo Azure ou do aplicação corporativo. Substitua o espaço reservado <percent-encoded audience> pelo valor codificado por cento do parâmetro do servidor de público configurado em sua deployment do MongoDB .
Você deve fornecer um valor TOKEN_RESOURCE codificado para URL quando ENVIRONMENT estiver definido como azure. O caractere vírgula (,) e sua codificação (%2C) são reservados, e utilizar estes caracteres em um valor faz com que o driver interprete vírgulas como delimitadores de pares de chave-valor. Você deve especificar valores que contêm vírgulas em uma instância do MongoCredential, como demonstrado na aba MongoCredential.
MongoClient mongoClient = MongoClients.create( "mongodb://<username>@<hostname>:<port>/?" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");
Substitua o espaço reservado <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 de servidor audience configurado em sua implantação do MongoDB .
MongoCredential credential = MongoCredential.createOidcCredential("<username>") .withMechanismProperty("ENVIRONMENT", "azure") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
GCP IMDS
Se seu aplicação é executado em uma VM do Google Compute Engine ou usa o GCP Instance Metadata Service, você pode autenticar no MongoDB usando o suporte integrado a GCP do driver Java Reactive Streams.
Você pode especificar a autenticação GCP IMDS OIDC usando um MongoCredential ou como parte da string de conexão.
Selecione nas abas Connection String ou MongoCredential para ver a sintaxe correspondente:
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:<url-encoded-resource>.
Substitua o espaço reservado <percent-encoded audience> pelo valor codificado por porcentagem do parâmetro de servidor audience configurado em sua implantação do MongoDB .
Você deve fornecer um valor TOKEN_RESOURCE codificado para URL quando ENVIRONMENT estiver definido como gcp. O caractere vírgula (,) e sua codificação (%2C) são reservados, e utilizar estes caracteres em um valor faz com que o driver interprete vírgulas como delimitadores de pares de chave-valor. Você deve especificar valores que contêm vírgulas em uma instância do MongoCredential, como demonstrado na aba MongoCredential.
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");
Substitua o espaço reservado <audience> pelo valor do parâmetro de servidor audience configurado em sua implantação do MongoDB .
MongoCredential credential = MongoCredential.createOidcCredential() .withMechanismProperty("ENVIRONMENT", "gcp") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kubernetes
Se seu aplicação for executado em um cluster Kubernetes, você poderá autenticar no MongoDB usando o suporte integrado do driver Java Reactive Streams.
Selecione nas abas Connection String ou MongoCredential para ver a sintaxe correspondente.
Para especificar o Kubernetes 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:k8s.
Substitua os placeholders <hostname> e <port> pelo endereço de rede e número da porta da sua deployment do MongoDB .
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>/" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s");
Substitua os placeholders <hostname> e <port> pelo endereço de rede e número da porta da sua deployment do MongoDB .
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("ENVIRONMENT", "k8s"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
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 Java Reactive Streams 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. Para fazer isso, use a propriedade de autenticação "OIDC_CALLBACK" , como mostrado no seguinte exemplo de código:
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { String accessToken = ... return new OidcCallbackResult(accessToken); });
O valor da propriedade "OIDC_CALLBACK" deve ser um Lambda ou outra implementação da interface funcional OidcCallback que aceite um OidcCallbackContext como parâmetro e retorne um OidcCallbackResult.
O exemplo a seguir recupera um token OIDC de um arquivo chamado "access-token.dat" no sistema de arquivos local:
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat")); return new OidcCallbackResult(accessToken); }); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
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: