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 permite al usuario autenticarse en un servicio Kerberos utilizando el nombre principal del usuario.

Nota

El método se refiere al mecanismo de autenticación GSSAPI en lugar de Kerberos porque el controlador se autentica mediante el GSSAPI RFC-4652 mecanismo SASL.

Los ejemplos de código en esta página utilizan los siguientes marcadores de posición:

  • Kerberos principal - su nombre principal codificado en URL, por ejemplo, "nombre de usuario%40REALM.ME"

  • hostname - dirección de red de tu servidor MongoDB, accesible por tu cliente

  • port - número de puerto de tu servidor MongoDB

Para especificar el mecanismo de autenticación GSSAPI utilizando una cadena de conexión, asigne el parámetro de URL authMechanism al valor GSSAPI. Luego, asigne opcionalmente el parámetro de URL authSource al valor $external.

Nota

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

Tu código para crear una instancia de MongoClient debería parecerse al siguiente:

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

Para especificar el mecanismo de autenticación GSSAPI mediante la clase MongoCredential, utilice el método createGSSAPICredential(). El código para instanciar un MongoClient debería ser similar al siguiente:

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 de Kerberos, las librerías Java GSSAPI requieren especificar el ámbito (realm) y el sistema de propiedades Key Distribution Center (KDC). Consulta la configuración de muestra en el siguiente ejemplo:

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

Puede que necesite especificar una o más de las siguientes MongoCredential propiedades de mecanismo adicionales 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 de GSSAPI utilizando el MongoCredential:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

El siguiente ejemplo muestra cómo especificar las propiedades adicionales:

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

Tu código para instanciar un MongoClient utilizando GSSAPI y propiedades adicionales podría parecerse al siguiente:

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, se debe llamar al método withMechanismProperty() en su instancia MongoCredential y pasar el nombre de la propiedad y el valor como parámetros. Utiliza las constantes de nombres de propiedades definidas en la clase MongoCredential:

El siguiente ejemplo crea una instancia de MongoCredential que utiliza GSSAPI y el/la SERVICE_NAME_KEY:

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")

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 especificar la propiedad del mecanismo JAVA_SUBJECT_PROVIDER y proporcionar un KerberosSubjectProvider en tu instancia de MongoCredential. El código para configurar el controlador de Kotlin para almacenar tickets de Kerberos en caché por proceso debe parecerse al siguiente:

/* 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 para su implementación de GSSAPI, lo que limita la interoperabilidad con Active Directory de Windows e implementaciones de inicio de sesión único. Consulta los siguientes artículos para obtener más información:

Volver

LDAP (PLAIN)

En esta página