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.

Nota

Terminología

La página utiliza GSSAPI cuando se refiere al mecanismo de autenticación y Kerberos cuando se refiere al protocolo o servicio subyacente. El driver se autentica mediante el mecanismo SASL GSSAPI RFC-4752, que se compila sobre el protocolo Kerberos.

Los ejemplos en esta sección muestran cómo especificar el mecanismo de autenticación GSSAPI y utilizar los siguientes valores de marcador de posición:

  • <Kerberos principal>: Su Nombre principal codificado en URL.

  • <hostname>La dirección de red de tu implementación de MongoDB, accesible desde tu cliente.

  • <port>: El número de puerto de tu implementación de MongoDB. Si omites este parámetro, el driver utiliza el número de puerto por defecto (27017).

Seleccione la pestaña Connection String o MongoCredential para ver las instrucciones y un ejemplo de código:

Para especificar el mecanismo de autenticación GSSAPI en su cadena de conexión, realice las siguientes acciones:

  • Establezca el parámetro URL authMechanism en GSSAPI.

  • (Opcional) Establezca el authSource parámetro URL $external en.

Nota

Si especifica el mecanismo GSSAPI, no puede asignar authSource a ningún valor que no sea $external.

El siguiente ejemplo especifica el mecanismo de autenticación en una cadena de conexión:

val mongoClient = MongoClient(
"mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI"
)

Para especificar el mecanismo de autenticación GSSAPI con la clase MongoCredential, usa el método createGSSAPICredential() como se muestra en el siguiente ejemplo:

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
val mongoClient = MongoClient(MongoClientSettings
.builder()
.applyToClusterSettings(builder =>
builder.hosts(List(new ServerAddress("<hostname>", <port>)).asJava))
.credential(credential)
.build())

Para obtener un ticket Kerberos, las bibliotecas Java de GSSAPI requieren que especifique el dominio y las propiedades del sistema del Centro de Distribución de Claves (KDC).

El código siguiente muestra valores de ejemplo para estas propiedades:

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

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

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

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 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:

val mongoClient = MongoClient(
"mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService"
)

Importante

Solo puedes especificar las siguientes propiedades de GSSAPI utilizando el MongoCredential:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Seleccione la pestaña MongoCredential para ver cómo especificarlos.

Para especificar las propiedades adicionales de GSSAPI, llame al método withMechanismProperty() en su instancia MongoCredential y pase el nombre y el valor de la propiedad como parámetros. Utilice las siguientes constantes de nombre de propiedad definidas en la clase MongoCredential:

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

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.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) mediante un LoginContext. El siguiente ejemplo muestra esta configuración:

val loginContext = new LoginContext("<LoginModule implementation from JAAS config>")
loginContext.login()
val subject: Subject = loginContext.getSubject()
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject)

De forma predeterminada, el controlador de Scala 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é por defecto, 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 */
val myLoginContext = "myContext"
/* Login context defaults to "com.sun.security.jgss.krb5.initiate"
if unspecified in KerberosSubjectProvider */
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(
MongoCredential.JAVA_SUBJECT_PROVIDER_KEY,
new KerberosSubjectProvider(myLoginContext)
)

Nota

En Windows, la JRE de Oracle utiliza LSA en lugar de SSPI en su implementación de GSSAPI. Este comportamiento 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 Scala, consulte la guía Crear un MongoClient.

Para obtener más información sobre las clases y los métodos para autenticar su aplicación con el controlador Scala, consulte la siguiente documentación de la API: