Overview
El mecanismo de autenticación OpenID Connect (OIDC) permite autenticarse en MongoDB usando un proveedor de identidad de terceros, como Azure o Google Cloud Platform (GCP).
Puede utilizar este mecanismo solo para autenticarse en MongoDB Atlas o MongoDB Enterprise Advanced, y solo cuando se autentique en MongoDB v7.0 o posterior.
Tip
Autenticación OIDC
Para obtener más información sobre cómo configurar MongoDB Atlas para la autenticación OIDC, consulta Establecer la Federación de identidad de Workforce con OIDC en la documentación de Atlas.
Para más información sobre el uso de la autenticación OIDC con MongoDB, consulte Autenticación OpenID Connect y Parámetros de MongoDB Server en el manual del servidor MongoDB.
Las siguientes secciones describen cómo utilizar el mecanismo de autenticación MONGODB-OIDC para autenticar diferentes plataformas.
Azure IMDS
Si tu aplicación se ejecuta en una VM de Azure, o utiliza de otro modo el Servicio de metadatos de instancias de Azure (IMDS), puedes autenticarte en MongoDB usando el soporte incorporado de Azure del driver de Kotlin.
Puedes especificar la autenticación Azure IMDS OIDC especificando tus credenciales en la cadena de conexión o utilizando un MongoCredential
instancia. Selecciona el Connection String o MongoCredential pestaña para aprender cómo especificar la autenticación OIDC de Azure IMDS.
Reemplaza el marcador de posición <percent-encoded audience> en el siguiente código con el valor codificado en porcentaje del parámetro del servidor de audiencia configurado en tu implementación de MongoDB.
El carácter de coma (,) y su codificación (%2C) están reservados, y usar estos caracteres en un valor hace que el controlador interprete las comas como delimitadores de pares clave-valor. Debes especificar valores que contengan comas en una instancia de MongoCredential.
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
Sustituya el marcador de posición <OIDC principal> por el ID de cliente o el ID de la aplicación de la identidad gestionada de Azure o de la aplicación empresarial. Reemplace el marcador de posición <audience> con el valor del parámetro de servidor audience configurado en su implementación de MongoDB.
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "azure") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
GCP IMDS
Si tu aplicación se ejecuta en una VM de Google Compute Engine o utiliza de otro modo el Servicio de metadatos de instancia de GCP, puedes autenticarte en MongoDB utilizando la compatibilidad de funcionalidad incorporada de GCP del controlador Kotlin.
Puedes especificar la autenticación OIDC IMDS de GCP al definir tus credenciales en una cadena de conexión o utilizando una instancia MongoCredential.
Reemplaza el marcador de posición <percent-encoded audience> en el siguiente código con el valor codificado en porcentaje del parámetro del servidor de audiencia configurado en tu implementación de MongoDB.
El carácter de coma (,) y su codificación (%2C) están reservados, y usar estos caracteres en un valor hace que el controlador interprete las comas como delimitadores de pares clave-valor. Debes especificar valores que contengan comas en una instancia de MongoCredential.
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
Suplanta el marcador de posición <audience> con el valor del parámetro del servidor audience configurado en tu implementación de MongoDB.
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "gcp") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
Kubernetes
Si tu aplicación se ejecuta en un clúster de Kubernetes, puedes autenticarte en MongoDB usando la funcionalidad incorporada con Kubernetes en el driver de Kotlin. Puede especificar la autenticación OIDC de Kubernetes indicando sus credenciales en una cadena de conexión o utilizando una instancia de MongoCredential.
Para especificar Kubernetes OIDC como el mecanismo de autenticación, establezca las siguientes opciones en su cadena de conexión:
authMechanism: Establecer enMONGODB-OIDC.authMechanismProperties: Establecer enENVIRONMENT:k8s.
Reemplaza el marcador de posición <percent-encoded audience> en el siguiente código con el valor codificado en porcentaje del parámetro del servidor de audiencia configurado en tu implementación de MongoDB.
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
Reemplaza el hostname y el port por la dirección de red y el número de puerto de tu implementación de MongoDB. Además, reemplaza el marcador de posición <audience> con el valor del parámetro del servidor audience configurado en tu implementación de MongoDB.
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "k8s") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
Función de retorno personalizado
El driver de Kotlin no ofrece soporte de funcionalidad incorporada para todas las plataformas, incluyendo Azure Functions y Azure Kubernetes Service (AKS). En cambio, debes definir una función de retorno personalizada para utilizar OIDC y autentificarte desde estas plataformas. Para ello, utiliza la propiedad de autenticación "OIDC_CALLBACK", como se muestra en el siguiente ejemplo de código:
val credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK") { context: Context -> val accessToken = "..." OidcCallbackResult(accessToken) }
El valor de la propiedad "OIDC_CALLBACK" debe ser una lambda u otra implementación de la interfaz funcional OidcCallback que acepte un OidcCallbackContext como parámetro y devuelva un OidcCallbackResult.
El siguiente ejemplo utiliza una función de retorno de ejemplo para recuperar un token OIDC de un archivo denominado "access-token.dat" en el sistema de archivos local:
val credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK") { context: Context -> val accessToken = String(Files.readAllBytes(Paths.get("access-token.dat"))) OidcCallbackResult(accessToken) } val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build() )