Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Mecanismos de autenticación de empresa

MongoDB Enterprise Edition incluye mecanismos de autenticación que no están disponibles en MongoDB Community Edition. En esta guía, puede aprender a autenticarse en MongoDB usando estos mecanismos de autenticación. Para aprender sobre los otros mecanismos de autenticación disponibles en MongoDB, consulta la mecanismo de autenticación guide.

Puedes especificar tu mecanismo de autenticación y credenciales al conectarte a MongoDB utilizando una de las siguientes opciones:

  • Cadena de conexión

  • MongoCredential mé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. Elija el Connection String pestaña 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 Java Reactive Streams no admite 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.

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 acceder

  • portnú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_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Importante

Solo puedes especificar las siguientes propiedades GSSAPI a través de la clase MongoCredential:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_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));

Nota

En Windows, el JRE de Oracle utiliza LSA en lugar de SSPI en su implementación de GSSAPI, lo que limita la interoperabilidad con Windows Active Directory y las implementaciones de SSO (inicio de sesión único). Consulte los siguientes recursos para obtener más información:

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 LDAP

  • ldap_password: la contraseña de tu usuario LDAP

  • hostnamela dirección de red de tu implementación de MongoDB a la que tu cliente puede acceder

  • portnú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());

Importante

El mecanismo de autenticación MONGODB-OIDC requiere MongoDB Server v7.0 o posterior funcionando en una plataforma Linux.

Las siguientes secciones describen cómo utilizar el mecanismo de autenticación MONGODB-OIDC para autenticar diferentes plataformas.

Para obtener más información sobre el mecanismo de autenticación MONGODB-OIDC, consulta Autenticación de OpenID Connect y Parámetros del MongoDB Server en el manual del MongoDB Server.

Si su aplicación se ejecuta en una máquina virtual de Azure o utiliza el servicio de metadatos de instancias de Azure (IMDS), puede autenticarse en MongoDB utilizando la funcionalidad incorporada de Azure del controlador Java Reactive Streams.

Puede especificar la autenticación OIDC de Azure IMDS utilizando un MongoCredential o como parte de la cadena de conexión.

Seleccionar las pestañas Connection String o MongoCredential para ver la sintaxis correspondiente.

Sustituya el marcador de posición <username> por el ID de cliente o el ID de la aplicación de la identidad gestionada de Azure o de la aplicación empresarial. Reemplace el marcador de posición <percent-encoded audience> en el siguiente código con el valor codificado en porcentaje del parámetro de servidor de audiencia configurado en su implementación de MongoDB.

El carácter de coma (,) y su codificación (%2C) están reservados, y usar estos caracteres en un valor hace que el controlador interprete las comas como delimitadores de pares clave-valor. Debe especificar valores que contengan comas en una instancia MongoCredential, como se muestra en la pestaña MongoCredential.

MongoClient mongoClient = MongoClients.create(
"mongodb://<username>@<hostname>:<port>/?" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");

Sustituya el marcador de posición <username> por el ID de cliente o el ID de la aplicación de la identidad gestionada de Azure o de la aplicación empresarial. Reemplace el marcador de posición <audience> con el valor del parámetro de servidor audience configurado en su implementación de MongoDB.

MongoCredential credential = MongoCredential.createOidcCredential("<username>")
.withMechanismProperty("ENVIRONMENT", "azure")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

Si tu aplicación se ejecuta en una VM de Google Compute Engine o utiliza de alguna manera el Servicio de metadatos de instancias de GCP, puedes autenticarte a MongoDB usando la funcionalidad incorporada para GCP del driver de flujos reactivos de Java.

Puedes especificar la autenticación OIDC IMDS de GCP utilizando un MongoCredential o como parte de la cadena de conexión.

Las siguientes secciones contienen ejemplos de código que usan los siguientes marcadores de posición:

  • hostnamela dirección de red de tu implementación de MongoDB a la que tu cliente puede acceder

  • portnúmero de puerto de su implementación de MongoDB

Seleccionar las pestañas Connection String o MongoCredential para ver la sintaxis correspondiente.

Reemplaza el marcador de posición <percent-encoded audience> en el siguiente código con el valor codificado en porcentaje del parámetro del servidor de audiencia configurado en tu implementación de MongoDB.

El carácter de coma (,) y su codificación (%2C) están reservados, y usar estos caracteres en un valor hace que el controlador interprete las comas como delimitadores de pares clave-valor. Debe especificar valores que contengan comas en una instancia MongoCredential, como se muestra en la pestaña MongoCredential.

MongoClient mongoClient = MongoClients.create(
"mongodb://<hostname>:<port>/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");

Suplanta el marcador de posición <audience> con el valor del parámetro del servidor audience configurado en tu implementación de MongoDB.

MongoCredential credential = MongoCredential.createOidcCredential()
.withMechanismProperty("ENVIRONMENT", "gcp")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

Si tu aplicación se ejecuta en un clúster de Kubernetes, puedes autenticarte en MongoDB usando el soporte integrado para Kubernetes del driver de Streams reactivos de Java.

Selecciona entre las pestañas Connection String o MongoCredential para ver la sintaxis correspondiente.

Para especificar Kubernetes OIDC como el mecanismo de autenticación, establezca las siguientes opciones en su cadena de conexión:

  • authMechanism: Establecer en MONGODB-OIDC.

  • authMechanismProperties: Establecer en ENVIRONMENT:k8s.

MongoClient mongoClient = MongoClients.create(
"mongodb://<hostname>:<port>/" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:k8s");

Reemplace los hostname y port con la dirección de red y el número de puerto de su implementación de MongoDB.

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("ENVIRONMENT", "k8s");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

El controlador de Java Reactive Streams no ofrece soporte incorporado para todas las plataformas, incluidas Azure Functions y Azure Kubernetes Service (AKS). En su lugar, debe definir una función de retorno personalizada para utilizar OIDC para autenticar desde estas plataformas. Para ello, utiliza la propiedad de autenticación "OIDC_CALLBACK", como se muestra en el siguiente ejemplo de código:

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK", (context) -> {
String accessToken = ...
return new OidcCallbackResult(accessToken);
});

El valor de la propiedad "OIDC_CALLBACK" debe ser una lambda u otra implementación de la interfaz funcional OidcCallback que acepte un OidcCallbackContext como parámetro y devuelva un OidcCallbackResult.

El siguiente ejemplo utiliza una función de retorno de ejemplo para recuperar un token OIDC de un archivo denominado "access-token.dat" en el sistema de archivos local:

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK", (context) -> {
string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat"));
return new OidcCallbackResult(accessToken);
});
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

Volver

Autenticación

En esta página