Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Autenticación Kerberos (GSSAPI)

El mecanismo de autenticación de la API de Servicios de Seguridad Genéricos (GSSAPI) le permite autenticarse en un servicio Kerberos especificando su nombre principal de Kerberos.

Nota

Terminología

La página utiliza GSSAPI para referirse al mecanismo de autenticación y Kerberos para referirse al protocolo o servicio subyacente. El controlador se autentica mediante el mecanismo SASL GSSAPI RFC-,4752 que se basa en el protocolo Kerberos.

Las siguientes secciones contienen ejemplos de código que utilizan los siguientes valores de marcador de posición:

  • <username>: Su nombre principal codificado en URL, como por ejemplo "username%40REALM.ME"

  • <hostname>: La dirección de red de su implementación de MongoDB, accesible por su cliente.

  • <port>: El número de puerto de su implementación de MongoDB

Seleccione la pestaña Connection String o la MongoCredential a continuación para obtener instrucciones y un código de muestra sobre cómo especificar este mecanismo de autenticación:

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 obtener un ticket Kerberos, las bibliotecas Java de GSSAPI requieren que especifique el dominio y las propiedades del sistema JVM del Centro de Distribución de Claves (KDC). El siguiente ejemplo muestra cómo configurar estas propiedades:

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

Dependiendo de la configuración de Kerberos, es posible que deba especificar una o más de las siguientes propiedades adicionales del mecanismo de autenticación:

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Seleccione la pestaña Connection String o MongoCredential a continuación para obtener instrucciones y código de ejemplo para 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 formato <PROPERTY_NAME>:<value>.

El siguiente ejemplo se autentica en GSSAPI y especifica la propiedad SERVICE_NAME:

MongoClient mongoClient = MongoClients
.create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");

Importante

Solo puede especificar las siguientes propiedades GSSAPI en una instancia 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, 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:

El siguiente ejemplo se autentica en GSSAPI y especifica la constante SERVICE_NAME_KEY:

MongoCredential credential = MongoCredential
.createGSSAPICredential("<username>");
credential = credential
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");

La propiedad JAVA_SUBJECT_KEY requiere un objeto javax.security.auth.Subject. Para recuperar un Subject, primero debe autenticarse a través del Servicio de Autenticación y Autorización de Java (JAAS) utilizando un LoginContext. El siguiente ejemplo muestra esta configuración:

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

De forma predeterminada, el controlador Java Reactive Streams almacena en caché los tickets Kerberos según la instancia MongoClient que los creó. Si su implementación crea y destruye instancias MongoClient con frecuencia, puede mejorar el rendimiento cambiando el comportamiento predeterminado de almacenamiento en caché de tickets Kerberos para que se almacenen por proceso.

Importante

Debe utilizar la clase MongoCredential para cambiar el comportamiento de almacenamiento en caché predeterminado, ya que el mecanismo de autenticación de la cadena de conexión no admite la propiedad del mecanismo JAVA_SUBJECT_PROVIDER.

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, la JRE de Oracle utiliza la Autoridad de Seguridad Local (LSA) en lugar de la Interfaz del Proveedor de Soporte de Seguridad (SSPI) en su implementación de GSSAPI. Esto limita la interoperabilidad con Windows Active Directory y las implementaciones de inicio de sesión único. Para obtener más información, consulte los siguientes recursos:

Para obtener más información sobre la autenticación en MongoDB, consulta Autenticación en el manual del servidor de MongoDB.

Para obtener más información sobre cómo crear un MongoClient objeto utilizando el controlador Java Reactive Streams, consulte la guía Conectar con MongoDB.

Para obtener más información sobre las clases y métodos mencionados en esta guía, consulta la siguiente documentación API: