Mecanismos de autenticação empresarial
Nesta página
Visão geral
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:
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.
Especificar um mecanismo de autenticaçã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:
Mecanismos
Kerberos (GSSAPI)
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 acessarport
: 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 valorGSSAPI
(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));
LDAP (simples)
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 LDAPpassword
: a senha do usuário LDAPhostname
: endereço de rede da sua MongoDB deployment que seu cliente pode acessarport
: 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 valorPLAIN
(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());
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 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.
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 Java.
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.
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 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("<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());
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 Java .
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.
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());
Chamada de resposta personalizada
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());