Overview
MongoDB Enterprise Edition incluye mecanismos de autenticación que no están disponibles en MongoDB Community Edition. En esta guía, puedes aprender cómo autenticarte en MongoDB utilizando estos mecanismos de autenticación. Para obtener información sobre los otros mecanismos de autenticación disponibles en MongoDB, consulta la guía Mecanismos de autenticación.
Especifica un mecanismo de autenticación
Puedes especificar tu mecanismo de autenticación y credenciales al conectarte a MongoDB utilizando una de las siguientes opciones:
Cadena de conexión
MongoCredentialmétodo de fábrica
Una cadena de conexión (también conocida como URI de conexión) especifica cómo conectarse y autenticarse en tu clúster de MongoDB.
Para autenticar utilizando una cadena de conexión, incluye tus ajustes en tu cadena de conexión y luego pásala al método MongoClients.create() para crear tu MongoClient. Selecciona la pestaña Connection String en las siguientes secciones para ver la sintaxis para autenticar usando una cadena de conexión.
También puedes usar la clase MongoCredential para especificar tus detalles de autenticación. La clase MongoCredential contiene métodos de fábrica estáticos que construyen instancias que contienen tu mecanismo de autenticación y credenciales. Cuando utilice la clase asistente MongoCredential, use la clase MongoClientSettings.Builder para configurar sus parámetros de conexión. Selecciona la pestaña MongoCredential en las siguientes secciones para ver la sintaxis para autenticar utilizando un MongoCredential.
Importante
El controlador de Reactive Streams de Java no admite objetos UnixServerAddress o conexiones de socket de dominio. Para usar un socket de dominio para conectarse, usa el Java Sync Driver. De lo contrario, utiliza un objeto ServerAddress para conectarte desde el controlador Java Reactive Streams.
Mecanismos
Kerberos (GSSAPI)
El mecanismo de autenticación de la API de servicios de seguridad genéricos (GSSAPI) te permite autenticarte en un servicio Kerberos usando tu nombre principal.
Las siguientes secciones contienen ejemplos de código que usan los siguientes marcadores de posición:
usernamesu nombre principal codificado en URL, por ejemplo"username%40REALM.ME"hostnamela dirección de red de tu implementación de MongoDB a la que tu cliente puede accederportnúmero de puerto de su implementación de MongoDB
Seleccionar las pestañas Connection String o MongoCredential para ver la sintaxis correspondiente.
El siguiente ejemplo se autentica con GSSAPI utilizando una cadena de conexión:
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
Para especificar el mecanismo de autenticación GSSAPI utilizando la clase MongoCredential, llame al método createGSSAPICredential(), como se muestra en el siguiente ejemplo:
MongoCredential credential = MongoCredential.createGSSAPICredential("<username>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Para adquirir un ticket de Kerberos, las librerías de Java GSSAPI requieren que especifiques el realm y las propiedades del sistema del Centro de Distribución de Claves (KDC). Puedes configurar estos ajustes como se muestra en el siguiente ejemplo:
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
Es posible que tengas que especificar una o más de las siguientes propiedades adicionales del mecanismo MongoCredential, según la configuración de Kerberos:
SERVICE_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Importante
Solo puedes especificar las siguientes propiedades GSSAPI a través de la clase MongoCredential:
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Selecciona la pestaña MongoCredential para aprender a especificar estas propiedades.
Para especificar las propiedades adicionales de GSSAPI, incluya la propiedad en la cadena de conexión como un parámetro URL en el formato: <PROPERTY_NAME>:<value>.
El siguiente ejemplo se autentica en GSSAPI y especifica propiedades adicionales:
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
Para especificar las propiedades adicionales de GSSAPI, llama al método withMechanismProperty() en tu instancia MongoCredential y pasa el nombre de la propiedad y el valor como parámetros. Utilizar las constantes de nombres de propiedades definidas en la clase MongoCredential:
Seleccione la pestaña SERVICE_NAME_KEY o JAVA_SUBJECT_KEY para ver cómo especificar la propiedad correspondiente:
MongoCredential credential = MongoCredential .createGSSAPICredential("<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("<username>"); credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
Por defecto, el controlador Java Reactive Streams almacena en caché los tickets de Kerberos por instancia de MongoClient. Si tu implementación crea y destruye frecuentemente instancias MongoClient, puedes cambiar el comportamiento de almacenamiento en caché por defecto de los tickets de Kerberos a almacenamiento por proceso para mejorar el rendimiento.
Para almacenar en caché los tickets de Kerberos por proceso, debe usar el mecanismo de autenticación MongoCredential, ya que el mecanismo de autenticación de la cadena de conexión no admite la propiedad de mecanismo JAVA_SUBJECT_PROVIDER. Selecciona la pestaña MongoCredential para aprender a almacenar en caché los tickets de Kerberos por proceso.
Para almacenar en caché los tickets de Kerberos por proceso, especifica la propiedad del mecanismo JAVA_SUBJECT_PROVIDER y proporciona un KerberosSubjectProvider en tu instancia de MongoCredential, como se muestra en el siguiente ejemplo:
/* All MongoClient instances sharing this instance of KerberosSubjectProvider will share a Kerberos ticket cache */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential .createGSSAPICredential(<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 (PLAIN)
Puedes autenticarte en un servidor Lightweight Directory Access Protocol (LDAP) utilizando tu nombre de usuario y contraseña del servidor de directorio.
Tip
El mecanismo de autenticación se llama PLAIN en lugar de LDAP ya que autentica usando la Capa de Autenticación y Seguridad Simple PLAIN (SASL) definida en RFC-4616.
Las siguientes secciones contienen ejemplos de código que usan los siguientes marcadores de posición:
ldap_username: su nombre de usuario LDAPldap_password: la contraseña de tu usuario LDAPhostnamela dirección de red de tu implementación de MongoDB a la que tu cliente puede accederportnúmero de puerto de su implementación de MongoDB
Seleccionar las pestañas Connection String o MongoCredential para ver la sintaxis correspondiente.
MongoClient mongoClient = MongoClients .create("<ldap_username>:<ldap_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");
Para especificar el mecanismo de autenticación LDAP (PLAIN) mediante el uso de la clase MongoCredential, llama al método createPlainCredential(), como se muestra en el siguiente ejemplo:
MongoCredential credential = MongoCredential .createPlainCredential(<ldap_username>, "$external", <ldap_password>); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());