Menu Docs
Página inicial do Docs
/ / /
Driver de fluxos reativos do Java
/ /

Autenticação

Nesta página

  • MongoCredential
  • Mecanismo de autenticação padrão
  • Mecanismos baseados em SCRAM
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-CR
  • X.509
  • Kerberos (GSSAPI)
  • LDAP (simples)

O driver suporta todos os mecanismos de autenticação MongoDB, incluindo os disponíveis apenas no MongoDB Enterprise Edition.

Inclua as seguintes declarações de importação:

import com.mongodb.MongoCredential;
import com.mongodb.ConnectionString;
import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;

Uma credencial de autenticação é representada como uma instância da classe MongoCredential . A classe MongoCredential inclui métodos de fábrica estáticos para cada um dos mecanismos de autenticação suportados.

No MongoDB 3.0, O MongoDB alterou o mecanismo de autenticação padrão de MONGODB-CR para SCRAM-SHA-1. No MongoDB 4.0, o suporte para o mecanismo MONGODB-CR obsoleto foi removido e o suporte SCRAM- SHA-256 foi adicionado.

Para criar uma credencial que autentique usando o mecanismo de autenticação padrão, independentemente da versão do servidor, crie uma credencial usando o método de fábrica estática createCredential() :

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createCredential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

Ou você pode usar uma connection string sem especificar explicitamente o mecanismo de autenticação:

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1");

Para mecanismos de desafio e resposta, o uso do mecanismo de autenticação padrão é a abordagem recomendada, pois ele torna a atualização do MongoDB 2.6 para o MongoDB 3.0 mais simples, mesmo após a atualização do esquema de autenticação. Para usuários do MongoDB 4.0 , o uso do mecanismo de autenticação padrão também é recomendado, pois os mecanismos são verificados e o algoritmo de hash correto é usado.

O mecanismo de autenticação de resposta e desafio salgado (SCRAM) é o mecanismo de autenticação padrão do MongoDB desde 3.0. SCRAM é baseado no IETF RFC 5802 padrão que define as melhores práticas para a implementação de mecanismos de resposta desafiadora para autenticar usuários com senhas.

O MongoDB 3.0 introduziu suporte para SCRAM-SHA-1, que usa a função de hash SHA-1 . O MongoDB 4.0 introduziu suporte para SCRAM- SHA-256 que usa a função de hash SHA-256 .

O uso desse mecanismo requer que o MongoDB 4.0 e featureCompatibilityVersion sejam definidos como 4.0.

Para criar explicitamente uma credencial do tipo SCRAM-SHA-256, utilize o método createScramSha256Credential() :

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createScramSha256Credential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

Ou você pode usar uma connection string que especifique explicitamente authMechanism=SCRAM-SHA-256:

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-256");

Para criar explicitamente uma credencial do tipo SCRAM-SHA-1, utilize o método createScramSha1Credential() :

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createScramSha1Credential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

Ou você pode usar uma connection string que especifique explicitamente authMechanism=SCRAM-SHA-1:

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-1");

Importante

A partir da versão 4.0, o MongoDB remove o suporte para o mecanismo obsoleto MongoDB Challenge-Response (MONGODB-CR).

Se seu sistema tiver credenciais de usuário armazenadas em um esquema MONGODB-CR , você deverá atualizar para usar um mecanismo baseado em SCRAMantes de atualizar para a versão 4.0.

Para criar explicitamente uma credencial do tipo MONGODB-CR utilize o método de fábrica estático createMongCRCredential() :

String user; // the user name
String database; // the name of the database in which the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createMongoCRCredential(user, database, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

Ou você pode usar uma connection string que especifique explicitamente authMechanism=MONGODB-CR:

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=MONGODB-CR");

Observação

Depois de atualizar o esquema de autenticação de MONGODB-CR para SCRAM, as credenciais MONGODB-CR não serão autenticadas.

Com o mecanismo X.509 , o MongoDB usa o certificado X.509 apresentado durante a negociação SSL para autenticar um usuário cujo nome é derivado do nome distinto do certificado X.509 .

X. A autenticação 509 requer o uso de conexões SSL com validação de certificado. Para criar uma credencial deste tipo, utilize o método de fábrica estática createMongoX509Credential() :

String user; // The X.509 certificate derived user name, e.g. "CN=user,OU=OrgUnit,O=myOrg,..."
// ...
MongoCredential credential = MongoCredential.createMongoX509Credential(user);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

Ou você pode usar uma connection string que especifique explicitamente authMechanism=MONGODB-X509:

MongoClient mongoClient = MongoClients.create("mongodb://subjectName@host1/?authMechanism=MONGODB-X509&ssl=true");

Veja Usar x.509 Tutorial de certificados para autenticação de clientes no manual do servidor MongoDB para saber mais sobre como determinar o nome do assunto a partir do certificado.

O MongoDB Enterprise oferece suporte à autenticação proxy por meio do serviço Kerberos. Para criar uma credencial do tipo Kerberos (GSSAPI), utilize o método de fábrica estática createGSSAPICredential() :

String user; // The Kerberos user name, including the realm, e.g. "user1@MYREALM.ME"
// ...
MongoCredential credential = MongoCredential.createGSSAPICredential(user);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

Ou você pode usar uma connection string que especifique explicitamente authMechanism=GSSAPI:

MongoClient mongoClient = MongoClients.create("mongodb://username%40REALM.ME@host1/?authMechanism=GSSAPI");

Observação

O método refere-se ao mecanismo de autenticação GSSAPI em vez de Kerberos porque o driver autentica usando o mecanismo GSSAPI SASL.

Para autenticar com êxito usando o Kerberos, o aplicativo normalmente deve especificar várias propriedades do sistema para que as bibliotecas Java GSSAPI subjacentes possam adquirir um ticket Kerberos:

java.security.krb5.realm=MYREALM.ME
java.security.krb5.kdc=mykdc.myrealm.me

Dependendo da configuração do Kerberos, podem ser necessárias especificações de propriedade adicionais, dentro do código do aplicativo ou, em alguns casos, usando o método withMechanismProperty() da instância MongoCredential :

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

O seguinte código mostra como especificar a propriedade SERVICE_NAME dentro do objeto MongoCredential :

credential = credential.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "othername");

Ou você pode especificar a propriedade SERVICE_NAME dentro de ConnectionString:

uri = "mongodb://username%40MYREALM.com@myserver/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:othername"

Observação

No Windows, o Oracles JRE usa LSA em vez de SSDI em sua implementação da GSSAPI, o que limita a interoperabilidade com o Windows Active Directory e, em particular, a capacidade de implementar o logon único.

O MongoDB Enterprise oferece suporte à autenticação proxy por meio de um serviço Lightweight Directory Access Protocol (LDAP). Para criar uma credencial do tipo LDAP utilize o método de fábrica estático createPlainCredential() :

String user; // The LDAP user name
char[] password; // The LDAP password
// ...
MongoCredential credential = MongoCredential.createPlainCredential(user, "$external", password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

Ou você pode usar uma connection string que especifique explicitamente authMechanism=PLAIN:

MongoClient mongoClient = MongoClients.create("mongodb://user1@host1/?authSource=$external&authMechanism=PLAIN");

Observação

O método refere-se ao mecanismo de autenticação PLAIN em vez de LDAP porque o driver autentica usando o mecanismo PLAIN SASL.

Voltar

TLS/SSL