Overview
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
Especificar la autenticación Kerberos
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
authMechanismenGSSAPI(opcional) Establezca el
authSourcepará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)
Adquisición de un ticket Kerberos
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
Propiedades adicionales
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_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Importante
Solo puede especificar las siguientes propiedades GSSAPI utilizando MongoCredential:
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_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)
Almacenamiento en caché de tickets
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) )
Información Adicional
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.
Documentación de la API
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: