Mecanismos de autenticação empresarial
Nesta página
Visão geral
O MongoDB Enterprise Edition inclui mecanismos de autenticação que não estão disponíveis no MongoDB Community Edition. Neste guia, você pode aprender como autenticar no MongoDB usando esses mecanismos de autenticação. Para saber mais sobre os outros mecanismos de autenticação disponíveis no MongoDB, consulte o guia Mecanismos de autenticaçã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:
Connection string
MongoCredential
método de fábrica
Uma string de conexão (também conhecida como uri de conexão) especifica como se conectar e autenticar ao cluster MongoDB.
Para autenticar usando uma string de conexão, inclua suas configurações na string de conexão e, em seguida, passe-a para o método MongoClients.create()
para instanciar seu MongoClient
. Selecione a guia Connection String nas seções a seguir para visualizar a sintaxe para autenticar usando uma string de conexão.
Você também 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ê utilizar a classe assistente MongoCredential
, utilize a classe MongoClientSettings.Builder
para configurar suas configurações de conexão. Selecione a aba MongoCredential nas seções a seguir para visualizar a sintaxe para autenticar utilizando um MongoCredential
.
Mecanismos
Kerberos (GSSAPI)
O mecanismo de autenticação da API de serviços de segurança genérica (GSSAPI) permite que você autentique em um serviço Kerberos usando seu nome principal.
As seções a seguir contêm amostras de código que usam os seguintes espaços reservados:
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 as abas Connection String ou MongoCredential para ver a sintaxe correspondente.
O exemplo a seguir autentica no GSSAPI usando uma string de conexão:
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
Para especificar o mecanismo de autenticação GSSAPI usando a classe MongoCredential
, chame o método createGSSAPICredential()
, conforme mostrado no exemplo a seguir:
MongoCredential credential = MongoCredential.createGSSAPICredential("<username>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Para adquirir um ticket do Kerberos , as bibliotecas Java do GSSAPI exigem que você especifique as propriedades do sistema Realm e Key Administration Center (KDC). Você pode definir essas configurações como mostrado 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ê pode especificar as seguintes propriedades GSSAPI somente através da classe MongoCredential
:
JAVA_SUBJECT
JAVA_SASL_CLIENT_PROPERTIES
JAVA_SUBJECT_PROVIDER
Selecione a guia MongoCredential para saber como especificar estas propriedades.
Para especificar as propriedades adicionais do GSSAPI, inclua a propriedade na string de conexão como um parâmetro de URL no formato: <PROPERTY_NAME>:<value>
.
O exemplo a seguir autentica para GSSAPI e especifica propriedades adicionais:
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
Para especificar as propriedades adicionais do 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 aba SERVICE_NAME_KEY ou JAVA_SUBJECT_KEY para ver como especificar a propriedade correspondente:
MongoCredential credential = MongoCredential .createGSSAPICredential("<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("<username>"); credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
Por padrão, o driver Java Reactive Streams armazena em cache tíquetes Kerberos por instância MongoClient
. Se a sua implantação cria e destrói com frequência instâncias do MongoClient
, você pode alterar o comportamento padrão de cache do ticket Kerberos para cache por processo para melhorar o desempenho.
Para armazenar em cache tíquetes Kerberos por processo, você deve usar o mecanismo de mecanismo de autenticação MongoCredential
, pois o mecanismo de autenticação de string de conexão não suporta a propriedade de mecanismo JAVA_SUBJECT_PROVIDER
. Selecione a guia MongoCredential para saber como armazenar em cache tíquetes Kerberos por processo.
Para armazenar tíquetes Kerberos em cache por processo, especifique a JAVA_SUBJECT_PROVIDER
propriedade do mecanismo e forneça um KerberosSubjectProvider na sua instância MongoCredential
, conforme mostrado no exemplo a seguir:
/* All MongoClient instances sharing this instance of KerberosSubjectProvider will share a Kerberos ticket cache */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential .createGSSAPICredential(<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)
Você pode autenticar em um servidor LDAP (Lightweight Directory Access Protocol) usando seu nome de usuário e senha do servidor de diretório.
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.
As seções a seguir contêm amostras de código que usam os seguintes espaços reservados:
ldap_username
: seu nome de usuário LDAPldap_password
: 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 as abas Connection String ou MongoCredential para ver a sintaxe correspondente.
MongoClient mongoClient = MongoClients .create("<ldap_username>:<ldap_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");
Para especificar o mecanismo de autenticação LDAP (PLAIN) usando a classe MongoCredential
, chame o método createPlainCredential()
, conforme mostrado no exemplo a seguir:
MongoCredential credential = MongoCredential .createPlainCredential(<ldap_username>, "$external", <ldap_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 aplicação 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 Reactive Streams.
Você pode especificar a autenticação do Azure IMDS OIDC utilizando um MongoCredential
ou como parte da string de conexão.
Selecione as abas Connection String ou MongoCredential para ver a sintaxe correspondente.
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>
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://<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 Serviço de Metadados de Instância GCP, você pode autenticar no MongoDB usando o suporte GCP integrado 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.
As seções a seguir contêm amostras de código que usam os seguintes espaços reservados:
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 as 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 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 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());