Overview
El mecanismo de autenticación OpenID Connect (OIDC) le permite autenticarse en MongoDB mediante un proveedor de identidad de terceros, como Azure o Google Cloud Platform (GCP).
Puede utilizar este mecanismo solo cuando se autentique 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, consulte Configurar Workforce Identity Federation con OIDC en la documentación de Atlas.
Para obtener más información sobre el uso de la autenticación OIDC con MongoDB, consulte Autenticación y autorización con OIDC/OAuth 2.0 y oidcIdentityProviders en el manual del servidor MongoDB.
Marcadores de posición de código
Los ejemplos de código de esta página utilizan los siguientes marcadores de posición:
<db_username>:El nombre de usuario de MongoDB del usuario que se va a autenticar.<hostname>: La dirección de red de tu implementación de MongoDB.<port>: El número de puerto de tu implementación de MongoDB. Si omites este parámetro, el controlador utilizará el número de puerto por defecto (27017). No necesitas un número de puerto al conectarte a un clúster de MongoDB Atlas.
Para utilizar los ejemplos de código, reemplaza estos marcadores de posición por tus propios valores.
Especificar la autenticación OIDC
Las siguientes secciones describen cómo utilizar la autenticación OIDC para autenticarse desde varias plataformas.
IMDS de Azure
Si su aplicación se ejecuta en una máquina virtual de Azure o utiliza el Servicio de metadatos de instancia de Azure (IMDS), puede autenticarse en MongoDB mediante el soporte integrado de Azure del controlador Java.
Puede especificar la autenticación OIDC de Azure IMDS mediante MongoCredential o como parte de la cadena de conexión.
Seleccione de la Connection String o MongoCredential pestañas para ver la sintaxis correspondiente:
Para especificar Azure IMDS OIDC como mecanismo de autenticación, configure las siguientes opciones en su cadena de conexión:
authMechanism:Establecer enMONGODB-OIDC.authMechanismProperties:Establecer enENVIRONMENT:azure.
Reemplace 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 su implementación de MongoDB.
El carácter de coma (,) y su codificación (%2C) están reservados. Su uso en un valor hace que el controlador interprete las comas como delimitadores de pares clave-valor. Debe especificar valores que contengan comas en una instancia MongoCredential, como se muestra en la pestaña MongoCredential.
MongoClient mongoClient = MongoClients.create( "mongodb://<db_username>@<hostname>:<port>/?" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");
Reemplace el marcador de posición <audience> con el valor del parámetro de servidor audience configurado en su implementación de MongoDB.
MongoCredential credential = MongoCredential.createOidcCredential("<db_username>") .withMechanismProperty("ENVIRONMENT", "azure") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
GCP IMDS
Si su aplicación se ejecuta en una máquina virtual de Google Compute Engine o utiliza el servicio de metadatos de instancia de GCP, puede autenticarse en MongoDB mediante la compatibilidad con GCP integrada del controlador Java.
Puede especificar la autenticación OIDC de GCP IMDS utilizando un MongoCredential o como parte de la cadena de conexión.
Selecciona desde las pestañas Connection String o MongoCredential para ver la sintaxis correspondiente:
Para especificar GCP IMDS OIDC como mecanismo de autenticación, configure las siguientes opciones en su cadena de conexión:
authMechanism:Establecer enMONGODB-OIDC.authMechanismProperties:Establecer enENVIRONMENT:gcp.
Reemplace 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 su implementación de MongoDB.
El carácter de coma (,) y su codificación (%2C) están reservados. Su uso en un valor hace que el controlador interprete las comas como delimitadores de pares clave-valor. Debe especificar valores que contengan comas en una instancia MongoCredential, como se muestra en la pestaña MongoCredential.
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");
Reemplace el marcador de posición <audience> con el valor del parámetro de servidor audience configurado en su implementación de MongoDB.
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("ENVIRONMENT", "gcp") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kubernetes
Si tu aplicación se ejecuta en un clúster de Kubernetes, puedes autenticarte en MongoDB utilizando la funcionalidad incorporada del controlador Java con Kubernetes.
Seleccione una de las pestañas Connection String o MongoCredential para ver la sintaxis correspondiente.
Para especificar Kubernetes OIDC como mecanismo de autenticación, configure las siguientes opciones en su cadena de conexión:
authMechanism:Establecer enMONGODB-OIDC.authMechanismProperties:Establecer enENVIRONMENT:k8s.
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>/" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s");
Reemplace hostname y port con la dirección de red y el número de puerto de su implementación de MongoDB.
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("ENVIRONMENT", "k8s"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Si especifica Kubernetes OIDC como mecanismo de autenticación, el controlador lee el contenido del token OIDC desde una de las siguientes ubicaciones:
AZURE_FEDERATED_TOKEN_FILEVariable de entorno para aplicaciones que se ejecutan en Azure Kubernetes Service (AKS)AWS_WEB_IDENTITY_TOKEN_FILEVariable de entorno para aplicaciones que se ejecutan en Elastic Kubernetes Service (EKS)/var/run/secrets/kubernetes.io/serviceaccount/tokenarchivo, la ubicación predeterminada para todas las demás aplicaciones, incluidas las que se ejecutan en Google Kubernetes Engine (GKE)
Debes almacenar tu token OIDC en la ubicación que corresponda al servicio que utilizas para ejecutar tu aplicación.
Devolución de llamada personalizada
El controlador de Java no ofrece compatibilidad integrada con todas las plataformas, incluidas Azure Functions y Azure Kubernetes Service (AKS). En su lugar, debe definir una devolución de llamada personalizada para usar OIDC para la autenticación desde estas plataformas. Para ello, use la propiedad de autenticación "OIDC_CALLBACK", como se muestra en el siguiente ejemplo de código:
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { String accessToken = ... return new 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 devolución de llamada de ejemplo para recuperar un token OIDC de un archivo llamado "access-token.dat" en el sistema de archivos local:
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat")); return new OidcCallbackResult(accessToken); }); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Documentación de la API
Para obtener más información sobre cualquiera de los métodos o tipos analizados en esta página, consulte la siguiente documentación de API: