En esta guía, puedes aprender cómo autenticarte con MongoDB usando los mecanismos de autenticación disponibles en la MongoDB Community Edition. Los mecanismos de autenticación son procesos mediante los cuales el controlador y el servidor confirman la identidad de un cliente para garantizar la seguridad antes de conectarse.
MongoCredential
Incluye las siguientes instrucciones de importación:
import com.mongodb.MongoCredential; import com.mongodb.ConnectionString; import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoClient;
Una credencial de autenticación se representa como una instancia de la
MongoCredential clase. La clase MongoCredential incluye métodos de fábrica estáticos para cada uno de los mecanismos de autenticación admitidos.
Mecanismo de autenticación por defecto
Para crear una credencial que se autentique mediante el mecanismo de autenticación predeterminado, SCRAM-SHA-256, cree una credencial utilizando el método de fábrica estático 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());
Importante
El controlador Java Reactive Streams no es compatible UnixServerAddress objetos o conexiones de sockets de dominio. Para utilizar un socket de dominio para conectar, utiliza el Java Sync driver. De lo contrario, utiliza un objeto ServerAddress para conectar desde el controlador Java Reactive Streams.
O bien, puede utilizar una cadena de conexión sin especificar explícitamente el mecanismo de autenticación:
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1");
Para mecanismos de desafío y respuesta, recomendamos usar el mecanismo de autenticación por defecto. Esto simplifica las actualizaciones y garantiza que se utilice el algoritmo de hash correcto.
Mecanismos Basados en SCRAM
El mecanismo de autenticación desafío-respuesta conSCRAM sal () se basa en el estándar RFC 5802 de la IETF, que define las mejores prácticas para la implementación de mecanismos de desafío-respuesta para la autenticación de usuarios con contraseñas. MongoDB admite SCRAM-SHA-1 tanto, que utiliza la SHA-1 función hash,SCRAM-
SHA-256 como, que utiliza la SHA-256 función hash.
SCRAM-SHA-256
Para crear explícitamente una credencial de tipo SCRAM-SHA-256, use el 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());
O bien, puedes utilizar una cadena de conexión que especifique explícitamente authMechanism=SCRAM-SHA-256:
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-256");
SCRAM-SHA-1
Para crear explícitamente una credencial de tipo SCRAM-SHA-1, use el 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());
O bien, puedes utilizar una cadena de conexión que especifique explícitamente authMechanism=SCRAM-SHA-1:
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-1");
MONGODB-CR
Importante
MongoDB ya no admite el mecanismo de autenticación obsoleto de desafío-respuesta de MongoDB (MONGODB-CR). Si tu implementación tiene credenciales de usuario almacenadas en un esquema MONGODB-CR, debes actualizar a un mecanismo basado en SCRAM.
Para crear explícitamente una credencial del tipo MONGODB-CR, utiliza el 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());
O bien, puedes utilizar una cadena de conexión que especifique explícitamente authMechanism=MONGODB-CR:
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=MONGODB-CR");
Nota
Después de actualizar el esquema de autenticación de MONGODB-CR a SCRAM, las credenciales de MONGODB-CR no se autenticarán.
X.509
Con el mecanismo X.509, MongoDB utiliza el certificado X.509 presentado durante la negociación SSL para autenticar a un usuario cuyo nombre se deriva del nombre distinguido del certificado X.509.
La autenticación X.509 requiere el uso de conexiones SSL con validación de certificados. Para crear una credencial de este tipo utiliza el método de fábrica estático 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());
O bien, puedes utilizar una cadena de conexión que especifique explícitamente authMechanism=MONGODB-X509:
MongoClient mongoClient = MongoClients.create("mongodb://subjectName@host1/?authMechanism=MONGODB-X509&ssl=true");
Consulte el tutorial Usar certificados x. para autenticar clientes en509 el manual del servidor para obtener más información sobre cómo determinar el nombre del sujeto a partir del certificado.