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
MongoCredentialmé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.
Importante
O driver Java Reactive Streams não suporta objetos UnixServerAddress ou conexões de soquete de domínio. Para usar um soquete de domínio para se conectar, use o Driver Java Sync. Caso contrário, use um objeto ServerAddress para se conectar a partir do driver Java Reactive Streams.
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 Kerberos, as bibliotecas GSSAPI Java exigem que você especifique as propriedades do sistema Realm e Key Distribution 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_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Importante
Você pode especificar as seguintes propriedades GSSAPI somente através da classe MongoCredential :
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_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 em cache tickets Kerberos por processo, especifique a propriedade de mecanismo JAVA_SUBJECT_PROVIDER e forneça um KerberosSubjectProvider em 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 em PLAIN vez de,LDAP pois autentica usando a PLAIN Simple Authentication and Security Layer (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());