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());