Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Mecanismos de autenticación

Esta guía describe los mecanismos que puedes usar en el driver C para autenticar usuarios a MongoDB.

Importante

Codificación porcentaje

Debes encode percentualmente un nombre de usuario y contraseña antes de incluirlos en un URI de MongoDB.

SCRAM-SHA-256, según se define en RFC 7677, es el mecanismo de autenticación predeterminado en implementaciones de MongoDB que ejecutan MongoDB v4.0 o más tarde.

Para autenticar usando SCRAM-SHA-256, configure las siguientes opciones de conexión:

  • usernameEl nombre de usuario para autenticar. Codifica este valor en formato percent antes de incluirlo en el URI de conexión.

  • passwordLa contraseña para autenticarse. Codifica este valor en formato percent antes de incluirlo en el URI de conexión.

  • authSourceLa base de datos MongoDB contra la que se debe autenticar. Por defecto, el controlador C se autentica contra la base de datos en el URI de conexión, si incluye uno. Si no especificas una base de datos de autenticación, se autentica contra la base de datos admin.

  • authMechanism: Establecer en SCRAM-SHA-256.

Puedes configurar estas opciones de conexión usando una cadena de conexión o la API mongoc_uri_t. El siguiente ejemplo de código muestra cómo crear un cliente de MongoDB que se autentica utilizando el mecanismo SCRAM-SHA-256:

const char *uri = "mongodb://<percentEncodedUsername>:<percentEncodedPassword>@<hostname>:<port>/?authMechanism=SCRAM-SHA-256&authSource=<authenticationDatabase>";
mongoc_client_t *client = mongoc_client_new(uri);
mongoc_uri_t *uri = mongoc_uri_new("mongodb://<percentEncodedUsername>:<percentEncodedPassword>@<hostname>:<port>/");
// Set the authentication mechanism and properties
mongoc_uri_set_auth_mechanism(uri, "SCRAM-SHA-256");
mongoc_uri_set_auth_source(uri, "<authenticationDatabase>");
// Create a client from the URI
mongoc_client_t *client = mongoc_client_new_from_uri(uri);

SCRAM-SHA-1, como se define en RFC 5802 es el mecanismo de autenticación predeterminado en implementaciones de MongoDB que ejecutan MongoDB v3.6.

Para autenticarte con este mecanismo, establece las siguientes opciones de conexión:

  • usernameEl nombre de usuario para autenticar. Codifica este valor en formato percent antes de incluirlo en el URI de conexión.

  • passwordLa contraseña para autenticarse. Codifica este valor en formato percent antes de incluirlo en el URI de conexión.

  • authSource: La base de datos de MongoDB ante la que se debe autenticar. Por defecto, el controlador C se autentica contra la base de datos admin.

  • authMechanism: Establecer en "SCRAM-SHA-1".

Puedes configurar estas opciones de conexión usando una cadena de conexión o la API mongoc_uri_t. El siguiente ejemplo de código muestra cómo crear un cliente de MongoDB que se autentica utilizando el mecanismo SCRAM-SHA-1:

const char *uri = "mongodb://<percentEncodedUsername>:<percentEncodedPassword>@<hostname>:<port>/?authMechanism=SCRAM-SHA-1&authSource=<authenticationDatabase>";
mongoc_client_t *client = mongoc_client_new(uri);
mongoc_uri_t *uri = mongoc_uri_new("mongodb://<percentEncodedUsername>:<percentEncodedPassword>@<hostname>:<port>/");
// Set the authentication mechanism and properties
mongoc_uri_set_auth_mechanism(uri, "SCRAM-SHA-1");
mongoc_uri_set_auth_source(uri, "<authenticationDatabase>");
// Create a client from the URI
mongoc_client_t *client = mongoc_client_new_from_uri(uri);

Si compilas el controlador de C con soporte TLS, el controlador de C puede presentar un certificado de cliente X.509 a MongoDB para demostrar su identidad durante el handshake TLS. El mecanismo de autenticación MONGODB-X509 utiliza este certificado para autenticar al cliente.

Para autenticarte con este mecanismo, realiza los siguientes pasos:

  1. Crea una estructura mongoc_ssl_opt_t. En esta estructura, establece el campo pem_file en la ruta del archivo .pem que contiene tu certificado de cliente y llave privada.

  2. En tu URI de conexión, establece la opción de conexión authMechanism en "MONGODB-X509".

Puede configurar este método de autenticación utilizando una cadena de conexión o la mongoc_uri_t API. El siguiente ejemplo de código muestra cómo crear un cliente de MongoDB que se autentica utilizando el mecanismo MONGODB-X509:

mongoc_client_t *client;
mongoc_ssl_opt_t ssl_opts = {0};
ssl_opts.pem_file = "mycert.pem";
const char *uri = "mongodb://<percentEncodedUsername>@<hostname>:<port>/?authMechanism=MONGODB-X509";
mongoc_client_t *client = mongoc_client_new(uri);
mongoc_client_set_ssl_opts(client, &ssl_opts);
mongoc_client_t *client;
mongoc_ssl_opt_t ssl_opts = {0};
ssl_opts.pem_file = "mycert.pem";
mongoc_uri_t *uri = mongoc_uri_new("mongodb://<percentEncodedUsername>:<percentEncodedPassword>@<hostname>:<port>/");
// Set the authentication mechanism
mongoc_uri_set_auth_mechanism(uri, "MONGODB-X509");
// Create a client from the URI
mongoc_client_t *client = mongoc_client_new_from_uri(uri);
mongoc_client_set_ssl_opts(client, &ssl_opts);

Importante

El mecanismo de autenticación MONGODB-AWS requiere MongoDB v4.4 o posterior.

El mecanismo de autenticación MONGODB-AWS utiliza AWS IAM (Amazon Web Services Identity and Access Management) o credenciales de AWS Lambda para autenticar tu aplicación. Para utilizar este mecanismo para autenticar su aplicación, primero cree un usuario con un Amazon Resource Name (ARN) asociado en la base de datos $external. A continuación, especifique el MONGODB-AWS authMechanism en la URI de conexión.

Cuando utilices el mecanismo MONGODB-AWS, el driver de C intenta recuperar tus credenciales de AWS de las siguientes fuentes, en el orden mencionado:

  1. Parámetros nombrados pasados a la URI de conexión

  2. Variables de entorno

  3. Solicitud de AWS EKS AssumeRoleWithWebIdentity

  4. Metadatos de contenedor ECS

  5. Metadatos de la instancia EC2

Las siguientes secciones describen cómo usar el controlador C para recuperar credenciales de estas fuentes y utilizarlas para autenticar su aplicación.

Primero, el controlador C verifica si pasaste credenciales AWS al constructor mongoc_client_t como parte del URI de conexión. Para pasar tus credenciales en el URI de conexión, establece las siguientes opciones de conexión:

  • username: La clave de acceso de AWS IAM para autenticar.

  • password: La clave de acceso secreta de AWS IAM.

  • authMechanism: Establecer en "MONGODB-AWS".

Puede crear un URI que contenga estas opciones de conexión utilizando una cadena de conexión o la API mongoc_uri_t. El siguiente ejemplo de código muestra cómo crear un cliente de MongoDB que se autentique utilizando el mecanismo MONGODB-AWS:

const char *uri = "mongodb://<awsIamAccessKeyId>:<awsIamSecretAccessKey>@<hostname>:<port>/?authMechanism=MONGODB-AWS";
mongoc_client_t *client = mongoc_client_new(uri);

También puedes incluir un token de sesión de AWS pasándolo al parámetro authMechanismProperties:

const char *uri = "mongodb://<awsIamAccessKeyId>:<awsIamSecretAccessKey>@<hostname>:<port>/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<token>";
mongoc_client_t *client = mongoc_client_new(uri);
mongoc_uri_t *uri = mongoc_uri_new("mongodb://<awsIamAccessKeyId>:<awsIamSecretAccessKey>@<hostname>:<port>/");
// Set the authentication mechanism
mongoc_uri_set_auth_mechanism(uri, "MONGODB-AWS");
// Create a client from the URI
mongoc_client_t *client = mongoc_client_new_from_uri(uri);

También puedes incluir un token de sesión de AWS pasándolo al parámetro authMechanismProperties:

mongoc_uri_t *uri = mongoc_uri_new("mongodb://<awsIamAccessKeyId>:<awsIamSecretAccessKey>@<hostname>:<port>/");
// Set the authentication mechanism and properties
mongoc_uri_set_auth_mechanism(uri, "MONGODB-AWS");
bson_t mechanism_properties = BSON_INITIALIZER;
BSON_APPEND_UTF8(&mechanism_properties, "AWS_SESSION_TOKEN", "<token>");
mongoc_uri_set_mechanism_properties(uri, &mechanism_properties)
// Create a client from the URI
mongoc_client_t *client = mongoc_client_new_from_uri(uri);

Si no incluyes un nombre de usuario y una contraseña en tu URI de conexión, el controlador de C intenta recuperar las credenciales de AWS de las siguientes variables de entorno:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN (Opcional)

Para utilizar estas variables de entorno para autenticar tu aplicación, primero configúralas con los valores de IAM de AWS necesarios para la autenticación, como se muestra en el siguiente ejemplo de código:

export AWS_ACCESS_KEY_ID=<AWS IAM access key ID>
export AWS_SECRET_ACCESS_KEY=<AWS IAM secret access key>
export AWS_SESSION_TOKEN=<AWS session token>

Después de que establezca estas variables de entorno, establezca el parámetro authMechanism en su URI de conexión a "MONGODB-AWS" utilizando ya sea una cadena de conexión o la API mongoc_uri_t, como se muestra en el siguiente ejemplo:

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS";
mongoc_client_t *client = mongoc_client_new(uri);
mongoc_uri_t *uri = mongoc_uri_new("mongodb://<hostname>:<port>/");
// Set the authentication mechanism
mongoc_uri_set_auth_mechanism(uri, "MONGODB-AWS");
// Create a client from the URI
mongoc_client_t *client = mongoc_client_new_from_uri(uri);

Si su aplicación se ejecuta en un contenedor Elastic Container Service (ECS), el driver C puede recuperar automáticamente credenciales temporales de AWS desde un endpoint ECS. Para ello, especifique la URI del endpoint ECS en una variable de entorno llamada AWS_CONTAINER_CREDENTIALS_RELATIVE_URI, como se muestra en el siguiente ejemplo:

export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<URI of the ECS endpoint>

Después de configurar la variable de entorno, configura el parámetro authMechanism en tu URI de conexión a "MONGODB-AWS" usando una cadena de conexión o la API mongoc_uri_t, como se muestra en el siguiente ejemplo:

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS";
mongoc_client_t *client = mongoc_client_new(uri);
mongoc_uri_t *uri = mongoc_uri_new("mongodb://<hostname>:<port>/");
// Set the authentication mechanism
mongoc_uri_set_auth_mechanism(uri, "MONGODB-AWS");
// Create a client from the URI
mongoc_client_t *client = mongoc_client_new_from_uri(uri);

El driver C puede recuperar automáticamente credenciales temporales de AWS desde una2 instancia de Amazon Elastic nube Compute (EC2). Para utilizar credenciales temporales desde una instancia de EC2, establece el parámetro authMechanism en tu URI de conexión en "MONGODB-AWS" utilizando una cadena de conexión o la API mongoc_uri_t, como se muestra en el siguiente ejemplo:

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS";
mongoc_client_t *client = mongoc_client_new(uri);
mongoc_uri_t *uri = mongoc_uri_new("mongodb://<hostname>:<port>/");
// Set the authentication mechanism
mongoc_uri_set_auth_mechanism(uri, "MONGODB-AWS");
// Create a client from the URI
mongoc_client_t *client = mongoc_client_new_from_uri(uri);

Nota

Si configuras cualquiera de las variables de entorno de los métodos de autenticación AWS anteriores, el driver C intenta recuperar credenciales utilizando esos métodos antes de intentar recuperarlas de una instancia EC2. Para intentar recuperar credenciales solo de una instancia EC2, asegúrese de que las variables de entorno no estén configuradas.

Para aprender más sobre cómo autenticar tu aplicación en el driver C, consulta la siguiente documentación de la API:

Volver

Configuración de TLS

En esta página