Menu Docs
Página inicial do Docs
/ / /
Driver de sincronização Java
/

Mecanismos de autenticação empresarial

Nesta página

  • Visão geral
  • Especificar um mecanismo de autenticação
  • Mecanismos
  • Kerberos (GSSAPI)
  • LDAP (simples)
  • MONGODB-OIDC

Neste guia, você aprenderá como autenticar com o MongoDB usando cada mecanismo de autenticação disponível exclusivamente no MongoDB Enterprise Edition.

Você pode usar os seguintes mecanismos com a versão mais recente do MongoDB Enterprise Edition:

  • Kerberos (GSSAPI)

  • LDAP (simples)

  • MONGODB-OIDC

Para autenticar usando outro mecanismo, consulte oguia Mecanismos de autenticação. Para obter mais informações sobre como estabelecer uma conexão com seu cluster MongoDB, leia nosso Guia de Conexão.

Você pode especificar seu mecanismo de autenticação e credenciais ao se conectar ao MongoDB usando um dos seguintes:

  • Uma connection string

  • Um método de fábrica do MongoCredential

Uma connection string (também conhecida como uri de conexão) especifica como se conectar e autenticar ao Cluster MongoDB.

Para autenticar usando uma cadeia de conexão, inclua suas configurações na cadeia de conexão e passe-a para o método MongoClients.create() para instanciar seu MongoClient. Selecione a aba Connection String para visualizar a sintaxe para autenticar utilizando uma cadeia de conexão.

Alternativamente, você pode utilizar a classe MongoCredential para especificar seus detalhes de autenticação. A classe MongoCredential contém métodos de fábrica estáticos que constroem instâncias contendo seu mecanismo de autenticação e credenciais. Quando você usa a classe auxiliar MongoCredential, é necessário usar a classe MongoClientSettings.Builder para definir as configurações de conexão ao construir o MongoClient. Selecione a aba MongoCredential para visualizar a sintaxe para autenticar utilizando um MongoCredential.

Para obter mais informações sobre essas classes e métodos, consulte a seguinte documentação da API:

O mecanismo de autenticação da API de Serviços de Segurança Genérica (GSSAPI) permite ao usuário se autenticar em um serviço Kerberos usando o nome principal do usuário.

Observação

O método refere-se ao GSSAPI mecanismo de autenticação em vez de Kerberos porque o driver autentica usando o GSSAPI RFC-4652 Mecanismo SASL.

Os seguintes trechos de código mostram como especificar o mecanismo de autenticação, usando os seguintes placeholders:

  • username: seu nome principal codificado para URL, como "username%40REALM.ME"

  • hostname: endereço de rede da sua MongoDB deployment que seu cliente pode acessar

  • port: número da porta da sua implantação do MongoDB

Selecione a aba Connection String ou MongoCredential abaixo para obter instruções e amostras de código para especificar este mecanismo de autenticação:

Para especificar o mecanismo de autenticação GSSAPI usando uma cadeia de conexão:

  • Atribuir o parâmetro de URL authMechanism ao valor GSSAPI

  • (opcional) Atribua o parâmetro de URL do authSource ao valor $external

Observação

Se você especificar o mecanismo GSSAPI , não poderá atribuir authSource a nenhum valor diferente de $external.

O código para instanciar um MongoClient é semelhante ao seguinte:

MongoClient mongoClient = MongoClients.create("<db_username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");

Para especificar o mecanismo de autenticação GSSAPI utilizando a classe MongoCredential , utilize o método createGSSAPICredential() . O código para instanciar um MongoClient se assemelha ao seguinte:

MongoCredential credential = MongoCredential.createGSSAPICredential(<db_username>);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

Para adquirir um ticket Kerberos, as bibliotecas Java do GSSAPI exigem que você especifique as propriedades do sistema realm e Key Administration Center (KDC). Consulte as configurações de amostra no exemplo a seguir:

java.security.krb5.realm=MYREALM.ME
java.security.krb5.kdc=mykdc.myrealm.me

Talvez seja necessário especificar uma ou mais das seguintes propriedades adicionais do mecanismo MongoCredential , dependendo da configuração do Kerberos:

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Importante

Você só pode especificar as seguintes propriedades GSSAPI utilizando o MongoCredential:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Selecione a guia MongoCredential para ver como especificá-los.

Para especificar uma das propriedades adicionais da GSSAPI, inclua-a na string de conexão como um parâmetro de URL usando o formato: <PROPERTY_NAME>:<value>.

Seu código para instanciar um MongoClient utilizando GSSAPI e propriedades adicionais pode se assemelhar ao seguinte:

MongoClient mongoClient = MongoClients.create("<db_username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");

Para especificar uma das propriedades adicionais da GSSAPI, chame o método withMechanismProperty() na sua instância do MongoCredential e passe o nome e o valor da propriedade como parâmetros. Use as constantes de nome da propriedade definidas na classe MongoCredential :

Selecione a abaSERVIÇO_NAME_KEY ou JAVA_SUBJECT_KEY para ver o código de exemplo para instanciar um MongoCredential que usa GSSAPI e a propriedade selecionada:

MongoCredential credential = MongoCredential.createGSSAPICredential(<db_username>);
credential = credential.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService");
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>);
loginContext.login();
Subject subject = loginContext.getSubject();
MongoCredential credential = MongoCredential.createGSSAPICredential(<db_username>);
credential = credential.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);

Por padrão, o driver Java armazena em cache tickets Kerberos por instância MongoClient . Se o seu sistema precisar criar e destruir instâncias MongoClient com frequência, você poderá alterar o comportamento padrão de cache de tíquetes do Kerberos para cache por processo para melhorar o desempenho.

Para armazenar tickets Kerberos em cache por processo, você deve usar o mecanismo de autenticação MongoCredential, pois o mecanismo de autenticação de string de conexão não oferece suporte à propriedade de mecanismo JAVA_SUBJECT_PROVIDER. Se você quiser armazenar tíquetes Kerberos em cache por processo, selecione a guia MongoCredential para saber como fazer isso.

Para armazenar tíquetes Kerberos em cache por processo, você deve especificar a JAVA_SUBJECT_PROVIDER propriedade do mecanismo e fornecer um KerberosSubjectProvider na sua MongoCredential instância do . O código para configurar o driver Java para armazenar em cache os tickets Kerberos por processo é semelhante ao seguinte:

/* all MongoClient instances sharing this instance of KerberosSubjectProvider
will share a Kerberos ticket cache */
String myLoginContext = "myContext";
MongoCredential credential = MongoCredential.createGSSAPICredential(<db_username>);
/* login context defaults to "com.sun.security.jgss.krb5.initiate"
if unspecified in KerberosSubjectProvider */
credential = credential.withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY,
new KerberosSubjectProvider(myLoginContext));

Observação

No Windows, o JRE da Oracle usa LSA em vez de SSDI em sua implementação de GSSAPI, que limita a interoperabilidade com o Windows Active Directory e implementações de logon único. Consulte os seguintes artigos para obter mais informações:

Disponível no MongoDB Enterprise Edition 3.4 e posterior.

Você pode autenticar em um servidor LDAP (Lightweight Directory Access Protocol) usando seu nome de usuário e senha do servidor de diretórios.

Dica

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.

Você pode especificar este mecanismo de autenticação configurando o parâmetro authMechanism para PLAIN e incluindo seu nome de usuário e senha LDAP na connection string.

Os seguintes trechos de código mostram como especificar o mecanismo de autenticação, usando os seguintes placeholders:

  • username: seu nome de usuário LDAP

  • password: a senha do usuário LDAP

  • hostname: endereço de rede da sua MongoDB deployment que seu cliente pode acessar

  • port: número da porta da sua implantação do MongoDB

Selecione a aba Connection String ou MongoCredential abaixo para obter instruções e amostras de código para especificar este mecanismo de autenticação:

Para especificar o mecanismo de autenticação LDAP (PLAIN) usando uma cadeia de conexão:

  • Atribuir o parâmetro de URL authMechanism ao valor PLAIN

  • (opcional) Atribua o parâmetro de URL do authSource ao valor $external

Observação

Se você especificar o mecanismo PLAIN , não poderá atribuir authSource a nenhum valor diferente de $external.

O código para instanciar um MongoClient é semelhante ao seguinte:

MongoClient mongoClient = MongoClients.create("<db_username>:<db_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");

Para especificar o mecanismo de autenticação LDAP (PLAIN) usando a classe MongoCredential , use o método createPlainCredential() . O código para instanciar um MongoClient se assemelha ao seguinte:

MongoCredential credential = MongoCredential.createPlainCredential(<db_username>, "$external", <db_password>);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

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 MONGODB-OIDC para autenticar em 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 Java.

Você pode especificar a autenticação do Azure IMDS OIDC utilizando um MongoCredential ou como parte da cadeia de conexão.

Selecione nas abas Connection String ou MongoCredential para ver a sintaxe correspondente.

Substitua o espaço reservado <percent-encoded audience> no seguinte código pelo valor codificado por porcentagem do parâmetro do servidor de público configurado em sua implantação do MongoDB.

O caractere de vírgula (,) e sua codificação (%2C) são reservados, e o uso desses caracteres em um valor faz com que o driver interprete as vírgulas como delimitadores de pares de valores-chave. 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://<db_username>@<hostname>:<port>/?" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");

Substitua o espaço reservado <db_username> pelo ID do cliente ou ID do aplicativo da identidade gerenciada pelo Azure ou do aplicativo 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("<db_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());

Se seu aplicativo é 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 Java.

Você pode especificar a autenticação GCP IMDS OIDC usando um MongoCredential ou como parte da cadeia de conexão.

Selecione nas abas Connection String ou MongoCredential para ver a sintaxe correspondente.

Substitua o espaço reservado <percent-encoded audience> no seguinte código pelo valor codificado por porcentagem do parâmetro do servidor de público configurado em sua implantação do MongoDB.

O caractere de vírgula (,) e sua codificação (%2C) são reservados, e o uso desses caracteres em um valor faz com que o driver interprete as vírgulas como delimitadores de pares de valores-chave. 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());

O driver Java 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 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 usa um exemplo de chamada de resposta para recuperar 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());

Voltar

Mecanismos de autenticação