Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Autenticación Kerberos (GSSAPI)

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

Nota

La página hace referencia al mecanismo de autenticación GSSAPI en lugar de Kerberos porque el controlador se autentica utilizando el GSSAPI RFC-4652 mecanismo SASL.

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 su implementación de MongoDB, a la que puede acceder su 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).

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

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

  • Establece el parámetro de URL authMechanism en GSSAPI

  • (opcional) Establezca el parámetro URL authSource a $external

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 connectionString = ConnectionString("<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI")
val mongoClient = MongoClient.create(connectionString)

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 settings = MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
val mongoClient = MongoClient.create(settings)

Para adquirir un ticket Kerberos, las bibliotecas Java GSSAPI requieren que usted 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 MongoCredential, dependiendo de su 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 de GSSAPI usando el MongoCredential:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

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

Para especificar una de las propiedades adicionales del GSSAPI, inclúyala en la cadena de conexión como un parámetro de URL utilizando el formato: <PROPERTY_NAME>:<value>.

Tu código para crear una instancia de un MongoClient utilizando GSSAPI y propiedades adicionales se asemeja al siguiente ejemplo:

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

Para especificar una de las propiedades adicionales de GSSAPI, llama al método withMechanismProperty() en tu instancia MongoCredential y pasa el nombre y el valor de la propiedad como parámetros. Utiliza las siguientes constantes de nombre de propiedad definidas en la clase MongoCredential:

Selecciona la pestaña SERVICE_NAME_KEY o JAVA_SUBJECT_KEY para ver un código de muestra que instancie una MongoCredential que utilice GSSAPI y la propiedad seleccionada:

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

Por defecto, el driver de Kotlin almacena en caché los tickets de Kerberos por instancia de MongoClient. Si tu implementación necesita crear y destruir con frecuencia instancias de MongoClient, puedes cambiar el comportamiento por defecto del almacenamiento en caché de tickets de Kerberos para almacenarlos en caché por proceso, lo que mejora el rendimiento.

Para almacenar en caché los tickets de Kerberos por proceso, debes usar el mecanismo de autenticación MongoCredential, ya que el mecanismo de autenticación de la cadena de conexión no admite la propiedad del mecanismo JAVA_SUBJECT_PROVIDER. Para ver las instrucciones, selecciona la pestaña MongoCredential.

Para almacenar en caché los tickets de Kerberos por proceso, debes especificar la propiedad del mecanismo JAVA_SUBJECT_PROVIDER y proporcionar un KerberosSubjectProvider en tu instancia de MongoCredential. El siguiente código configura el driver de Kotlin para almacenar en caché los tickets de Kerberos por proceso:

/* 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,
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 e implementaciones de inicio de sesión único. Consulta los siguientes artículos para obtener más información:

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 objeto MongoClient usando el Driver Synchronization de Kotlin, consulta la Crear una guía de MongoClient.

Para aprender más sobre las clases y métodos para autenticar tu aplicación con el driver Kotlin Sync, consulta la siguiente documentación de la API:

Volver

LDAP (PLAIN)

En esta página