O driver suporta todos os mecanismos de autenticação MongoDB, incluindo os disponíveis apenas no MongoDB Enterprise Edition.
MongoCredential
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.
Mecanismo de autenticação padrão
Para criar uma credencial que se autentica usando o mecanismo de autenticação padrão, SCRAM-SHA-256, crie uma credencial usando o método estático de fábrica 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, recomendamos usar o mecanismo de autenticação padrão. Isso simplifica as atualizações e garante que o algoritmo de hash correto seja usado.
Mecanismos baseados em SCRAM
O Mecanismo de Autenticação de Resposta de Desafio Salgado (SCRAM) é baseado no padrão IETF RFC 5802 que define as práticas recomendadas para a implementação de mecanismos de resposta e desafio para autenticar usuários com senhas. O MongoDB suporta SCRAM-SHA-1, que usa a função de hash SHA-1, e SCRAM-
SHA-256, que usa a função de hash SHA-256.
SCRAM-SHA-256
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");
SCRAM-SHA-1
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");
MONGODB-CR
Importante
O MongoDB não suporta mais o mecanismo de autenticação do MongoDB Challenge-Response (MONGODB-CR) obsoleto. Se seu sistema tiver credenciais de usuário armazenadas em um esquema do MONGODB-CR, você deverá atualizar para um mecanismo baseado em SCRAM.
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.
X.509
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.
Kerberos (GSSAPI)
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_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_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"
LDAP (simples)
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.