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 mediante el MecanismoGSSAPI RFC- SASL.4652

Los ejemplos de 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 su implementación de MongoDB. Si omite este parámetro, el controlador usa el número de puerto predeterminado (27017).

Seleccione 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 su cadena de conexión, realice las siguientes acciones:

  • Establezca el parámetro URL authMechanism en GSSAPI

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

Nota

Si especifica el mecanismo GSSAPI, no podrá 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 utilizando la clase MongoCredential, utilice 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 siguiente código muestra valores de muestra para estas propiedades:

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

Es posible que necesite especificar una o más de las siguientes propiedades de mecanismo MongoCredential adicionales según su configuración de Kerberos:

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Importante

Solo puede especificar las siguientes propiedades GSSAPI utilizando 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 de GSSAPI, inclúyala en la cadena de conexión como un parámetro de URL utilizando el formato: <PROPERTY_NAME>:<value>.

Su código para crear una instancia de MongoClient usando GSSAPI y propiedades adicionales se parece 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, 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:

Seleccione la pestaña SERVICE_NAME_KEY o JAVA_SUBJECT_KEY para ver el código de muestra para crear una MongoCredential instancia de que usa 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)

De forma predeterminada, el controlador de Kotlin almacena en caché los tickets de Kerberos por instancia MongoClient. Si su implementación necesita crear y destruir frecuentemente instancias MongoClient, puede cambiar el comportamiento predeterminado de almacenamiento en caché de tickets de Kerberos a caché por proceso para mejorar el rendimiento.

Para almacenar en caché los tickets 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 JAVA_SUBJECT_PROVIDER. Para ver las instrucciones, seleccione la pestaña MongoCredential.

Para almacenar en caché los tickets de Kerberos por proceso, debe especificar la JAVA_SUBJECT_PROVIDER propiedad del mecanismo y proporcionar un KerberosSubjectProvider en su MongoCredential instancia. El siguiente código configura el controlador 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 y las implementaciones de inicio de sesión único. Consulte los siguientes artículos para obtener más información:

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

Para obtener más información sobre cómo crear un objeto MongoClient mediante el controlador Kotlin Sync, consulte la Crear una guía de MongoClient.

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

Volver

LDAP (PLAIN)

En esta página