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).
El mecanismo de autenticación MONGODB-OIDC requiere MongoDB Server v7.0 o posterior ejecutándose en una plataforma Linux. Solo puedes usar este mecanismo al autenticarte en MongoDB Atlas o en MongoDB Enterprise Advanced.
Tip
Más información sobre la autenticación OIDC
Para obtener más información sobre cómo configurar MongoDB Atlas para la autenticación OIDC, consulta 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, consulta Autenticación y autorización con OIDC/OAuth 2.0 y oidcIdentityProviders en el manual del servidor de MongoDB.
Especificar autenticación OIDC
Las siguientes secciones describen cómo usar el MONGODB-OIDC mecanismo de autenticación para autenticar desde varias plataformas.
IMDS de Azure
Si tu aplicación se ejecuta en una VM de Azure o utiliza el Servicio de metadatos de instancias de Azure (IMDS), puedes autenticarte en MongoDB usando la compatibilidad integrada con Azure del controlador de Node.js.
Para especificar Azure IMDS OIDC como el mecanismo de autenticación, configure las siguientes opciones en su cadena de conexión:
username: Si estás usando una identidad administrada de Azure, establece esto en el ID de cliente de la identidad administrada. En caso contrario, omite esta opción.authMechanism:Establecer enMONGODB-OIDC.authMechanismProperties: Configurar enENVIRONMENT:azure,TOKEN_RESOURCE:<audience>. Reemplace el marcador de posición<audience>con el valor del parámetroaudienceconfigurado en su implementación de MongoDB.
El siguiente ejemplo de código muestra cómo establecer las opciones de conexión anteriores:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://<username>@<hostname>:<port>/?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>"; const client = new MongoClient(uri);
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 Node.js.
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: Configurar enENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>. Reemplace el marcador de posición<audience>con el valor del parámetroaudienceconfigurado en su implementación de MongoDB.
El siguiente ejemplo de código muestra cómo establecer las opciones de conexión anteriores:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>"; const client = new MongoClient(uri);
Kubernetes
Si su aplicación se ejecuta en un clúster de Kubernetes, puede autenticarse en MongoDB utilizando la funcionalidad incorporada de Kubernetes del controlador Node.js.
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.
El siguiente ejemplo de código muestra cómo establecer las opciones de conexión anteriores:
import { MongoClient } from "mongodb"; const uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s"; const client = new MongoClient(uri);
Si se especifica Kubernetes OIDC como el mecanismo de autenticación, el driver 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.
Función de retorno personalizado
El driver de Node.js no ofrece funcionalidad incorporada para todas las plataformas, incluidas Azure Functions. En su lugar, debe definir una función de retorno personalizada para utilizar OIDC a fin de autenticar desde estas plataformas.
Primero, defina una función que recupere el token de acceso para usarlo en la autenticación OIDC. Esta función debe tener la siguiente firma:
const myCallback = (params: OIDCCallbackParams): Promise<OIDCResponse> => { }
El parámetro OIDCCallbackParams contiene las siguientes propiedades, a las que puedes acceder dentro de la función:
Propiedad | Valor |
|---|---|
| Un |
| La versión actual de la API OIDC |
| La información del proveedor de identidad devuelta por el servidor |
| El nombre de usuario incluido en la cadena de conexión, si existe |
| El token de actualización para solicitar un nuevo token de acceso al emisor, si lo hay |
La función de devolución de llamada debe devolver un objeto OIDCResponse. Este objeto contiene las siguientes propiedades:
Propiedad | Valor |
|---|---|
| El token de acceso que se usará para autenticación. |
| opcional. El número de segundos hasta que caduque el token de acceso. |
| opcional. El token de actualización para solicitar un nuevo token de acceso al emisor. |
El siguiente ejemplo muestra una función de retorno que recupera un token de acceso OIDC desde un archivo llamado access-token.dat en el sistema de archivos local:
const fs = require("node:fs"); const myCallback = (params: OIDCCallbackParams): Promise<OIDCResponse> => { const token = fs.readFileSync("access-token.dat", "utf8"); return { accessToken: token, expiresInSeconds: 300, refreshToken: token }; }
Después de definir la función de retorno, pásala al constructor MongoClient como parte del parámetro authMechanismProperties. El driver de Node.js admite los siguientes patrones de autenticación:
Autenticación de máquina: Utilizada por servicios web y otras aplicaciones que no requieren interacción humana. Seleccione la opción Machine Callback Pestaña para ver un ejemplo de esta sintaxis.
Autenticación humana: Utilizada por herramientas de bases de datos, las utilidades de línea de comandos y otras aplicaciones que requieren interacción directa con el usuario. Selecciona la pestaña Human Callback para ver un ejemplo de esta sintaxis.
Para la autenticación de la máquina, asigna la función de retorno a la propiedad authMechanismProperties.OIDC_CALLBACK, como se muestra en el ejemplo siguiente:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC"; const client = new MongoClient(uri, { authMechanismProperties: { OIDC_CALLBACK: myCallback } });
Para la autenticación humana, asigne la función de devolución de llamada a la propiedad authMechanismProperties.OIDC_HUMAN_CALLBACK, como se muestra en el siguiente ejemplo:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://<host>:<port>/?authMechanism=MONGODB-OIDC"; const client = new MongoClient(uri, { authMechanismProperties: { OIDC_HUMAN_CALLBACK: myCallback } });
Documentación de la API
Para obtener más información sobre los métodos y tipos tratados en esta guía, consulta la siguiente documentación de la API: