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 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 OpenID Connect y Parámetros del MongoDB Server en el manual del MongoDB Server.
Marcadores de posición de código
Los ejemplos de código en esta página utilizan los siguientes marcadores de posición:
+srv: Incluir esta opción en el prefijo de su cadena de conexión solamente si está conectando a un clúster de MongoDB Atlas. Para obtener más información sobre la opción+srv, consulte Formatos de cadena de conexión en el manual del servidor de MongoDB.<username>ID de cliente o ID de la aplicación de la identidad gestionada de Azure o de la aplicación empresarial, si está realizando la autenticación con Azure IMDS.<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 driver usará el puerto por defecto (27017). No necesitas especificar un puerto al conectar a un clúster de MongoDB Atlas.<audience>: El parámetro de audiencia configurado en tu implementación de MongoDB.
Para utilizar los ejemplos de código en esta página, reemplace estos marcadores de posición con sus propios valores.
Uso de la autenticación OIDC en tu aplicación
Las siguientes secciones describen cómo utilizar la autenticación OIDC para autenticarse desde varias plataformas.
IMDS de Azure
Si tu aplicación se ejecuta en una VM de Azure o utiliza el servicio de metadatos de instancia de Azure (IMDS), puedes autenticarte en MongoDB utilizando la funcionalidad incorporada de Azure del driver .NET/C# soporte.
Puedes especificar la autenticación OIDC de IMDS de Azure en un objeto MongoClientSettings, ya sea utilizando un objeto MongoCredential o como parte de la cadena de conexión. Selecciona el
Connection String o pestaña MongoCredential para ver la sintaxis correspondiente.
El siguiente ejemplo de código muestra cómo especificar la autenticación OIDC de Azure IMDS. Reemplace el marcador de posición <percent-encoded audience> con el valor codificado en porcentaje del parámetro audience configurado en su implementación de MongoDB.
var connectionString = "mongodb://<username>@<hostname>[:<port>]/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
El siguiente ejemplo de código muestra cómo especificar la autenticación OIDC de Azure IMDS:
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential .CreateOidcCredential("azure", "<username>") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
GCP IMDS
Si tu aplicación se ejecuta en una VM de Google Compute Engine, o utiliza el Servicio de metadatos de instancias de GCP, puedes autenticarte en MongoDB utilizando el soporte de funcionalidad incorporada de GCP del driver .NET/C#.
Puedes especificar la autenticación OIDC de IMDS de GCP en un objeto MongoClientSettings usando un objeto MongoCredential o como parte de la cadena de conexión. Seleccione la pestaña Connection String o MongoCredential para ver la sintaxis correspondiente.
El siguiente ejemplo de código muestra cómo especificar la autenticación GCP IMDS OIDC como parte de la string de autenticación:
var connectionString = "mongodb://<hostname>[:<port>]/?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
El siguiente ejemplo de código muestra cómo especificar la autenticación OIDC de IMDS de GCP utilizando un objeto MongoCredential:
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential .CreateOidcCredential("gcp") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
Kubernetes
Si su aplicación se ejecuta en un clúster de Kubernetes, puede autenticarse en MongoDB utilizando la compatibilidad con Kubernetes integrada del controlador .NET/C#.
Puede especificar la autenticación OIDC de Kubernetes en un objeto MongoClientSettings mediante un objeto MongoCredential o como parte de la cadena de conexión. Seleccione la pestaña Connection String o MongoCredential para ver la sintaxis correspondiente.
El siguiente ejemplo de código muestra cómo especificar la autenticación OIDC de Kubernetes como parte de la cadena de conexión:
var connectionString = "mongodb://<hostname>[:<port>]/?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s"; var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
El siguiente ejemplo de código muestra cómo especificar la autenticación OIDC de Kubernetes usando un objeto MongoCredential:
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential .CreateOidcCredential("k8s") var client = new MongoClient(mongoClientSettings);
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 controlador .NET/C# no ofrece funcionalidad incorporada para todas las plataformas, incluidas las funciones de Azure. En su lugar, se debe definir una función de retorno personalizada para usar OIDC y autenticar desde estas plataformas.
Primero, defina una clase que implemente la interfaz IOidcCallback. Esta interfaz contiene dos métodos:
GetOidcAccessToken(): Este método acepta los parámetros del método de función de retorno y devuelve la respuesta de la función de retorno.GetOidcAccessTokenAsync()Este método es una versión asíncrona del método anterior.
El siguiente código es un ejemplo de implementación de la interfaz IOidcCallback. En este ejemplo, los métodos recuperan un token OIDC desde un archivo llamado "access-token.dat" en el sistema de archivos local.
public class MyCallback : IOidcCallback { public OidcAccessToken GetOidcAccessToken( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = File.ReadAllText("access-token.dat"); return new(accessToken, expiresIn: null); } public async Task<OidcAccessToken> GetOidcAccessTokenAsync( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = await File.ReadAllTextAsync( "access-token.dat", cancellationToken) .ConfigureAwait(false); return new(accessToken, expiresIn: null); } }
Después de definir una clase que contenga sus métodos de devolución de llamada personalizados, llame al método MongoCredential.CreateOidcCredential() y pase una nueva instancia de su clase. Guarde el resultado de esta llamada al método en la propiedad Credential de su objeto MongoClientSettings, como se muestra en el siguiente ejemplo de código:
var mongoClientSettings = MongoClientSettings .FromConnectionString("mongodb://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new MyCallback()); var client = new MongoClient(mongoClientSettings);
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: