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 por URL, por exemplo "username%40REALM.ME"hostname
- endereço de rede da sua MongoDB deployment, acessível pelo seu clienteport
- 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
.
Seu código para instanciar um MongoClient
deve ser semelhante a este:
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()
. Seu código para instanciar um MongoClient
deve ter a seguinte aparência:
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 parecer algo assim:
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 deve ser 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, acessível pelo seu clienteport
- 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
.
Seu código para instanciar um MongoClient
deve ser semelhante a este:
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()
. Seu código para instanciar um MongoClient
deve ter a seguinte aparência:
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());