Overview
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 hace referencia al mecanismo de autenticación GSSAPI en lugar de Kerberos porque el controlador se autentica utilizando el
MecanismoGSSAPI RFC- SASL.4652
Marcadores de posición de código
Los ejemplos de código de 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 su servidor MongoDB, accesible para su clienteport- número de puerto de su servidor MongoDB
Autenticarse con GSSAPI
Para especificar el mecanismo de autenticación GSSAPI mediante una cadena de conexión, asigne el parámetro URL authMechanism al valor GSSAPI. Luego, asigne opcionalmente el parámetro URL authSource al valor $external.
Nota
Si especifica el mecanismo GSSAPI, no podrá asignar authSource a ningún valor que no sea $external.
Su código para instanciar un 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 Kerberos, las bibliotecas Java de GSSAPI requieren que se especifiquen las propiedades del dominio y del sistema del Centro de Distribución de Claves (KDC). Consulte la configuración de ejemplo 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_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Importante
Puede especificar las siguientes propiedades GSSAPI solo utilizando MongoCredential:
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_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 utilizando el formato: <PROPERTY_NAME>:<value>.
Su código para instanciar un MongoClient usando 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 instancia un MongoCredential que utiliza GSSAPI y el SERVICE_NAME_KEY:
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")
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 de Kerberos por proceso, debe especificar la JAVA_SUBJECT_PROVIDER propiedad del mecanismo y proporcionar un KerberosSubjectProvider en su MongoCredential instancia. El código para configurar el controlador de Kotlin para almacenar en caché los tickets de Kerberos por proceso debería ser similar 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) )