Docs Menu
Docs Home
/ /

Mecanismos de autenticación

Esta guía describe los mecanismos que puede utilizar en el controlador C para autenticar usuarios en MongoDB.

Importante

Codificación porcentual

Usted debe percent-encode a username and password before you include them in a MongoDB URI.

SCRAM-SHA-,256 según lo define RFC, es el mecanismo de autenticación predeterminado en las implementaciones de MongoDB que ejecutan 7677MongoDB4 v.0 o posterior.

Para autenticarse mediante SCRAM-SHA-256, configure las siguientes opciones de conexión:

  • username: The username to authenticate. Percent-encode this value before including it in the connection URI.

  • password: The password to authenticate. Percent-encode this value before including it in the connection URI.

  • authSource: The MongoDB database to authenticate against. By default, the C driver authenticates against the database in the connection URI, if you include one. If you don't specify an authentication database, it authenticates against the admin database.

  • authMechanism:Establecer en SCRAM-SHA-256.

Puede configurar estas opciones de conexión mediante una cadena de conexión o la API mongoc_uri_t. El siguiente ejemplo de código muestra cómo crear un cliente MongoDB que se autentica mediante 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 autenticarse con este mecanismo, configure las siguientes opciones de conexión:

  • username: The username to authenticate. Percent-encode this value before including it in the connection URI.

  • password: The password to authenticate. Percent-encode this value before including it in the connection URI.

  • 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".

Puede configurar estas opciones de conexión mediante una cadena de conexión o la API mongoc_uri_t. El siguiente ejemplo de código muestra cómo crear un cliente MongoDB que se autentica mediante 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 compila el controlador C con compatibilidad con TLS, este puede presentar un certificado de cliente X.509 a MongoDB para comprobar su identidad durante el protocolo de enlace TLS. El mecanismo de autenticación de MONGODB-X509 utiliza este certificado para autenticar al cliente.

Para autenticarse con este mecanismo, realice 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 su URI de conexión, establezca la opción de conexión authMechanism en "MONGODB-X509".

Puede configurar este método de autenticación mediante una cadena de conexión o la API mongoc_uri_t. El siguiente ejemplo de código muestra cómo crear un cliente MongoDB que se autentica mediante 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 credenciales de AWS IAM (Amazon Web Services Identity and Access Management) o AWS Lambda para autenticar su aplicación. Para usar este mecanismo, primero cree un usuario con un nombre de recurso de Amazon (ARN) asociado en la base de datos $external. A continuación, especifique el mecanismo de autenticación MONGODB-AWS en la URI de conexión.

Cuando utiliza el mecanismo MONGODB-AWS, el controlador C intenta recuperar sus credenciales de AWS de las siguientes fuentes, en el orden indicado:

  1. Parámetros con nombre pasados ​​a la URI de conexión

  2. Variables de entorno

  3. Solicitud AssumeRoleWithWebIdentity de AWS EKS

  4. Metadatos del 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 comprueba si se pasaron las credenciales de AWS al constructor mongoc_client_t como parte de la URI de conexión. Para pasar las credenciales en la URI de conexión, configure las siguientes opciones de conexión:

  • username: The AWS IAM access key ID to authenticate.

  • password: The AWS IAM secret access key.

  • authMechanism:Establecer en "MONGODB-AWS".

Puede crear una URI que contenga estas opciones de conexión mediante una cadena de conexión o la API mongoc_uri_t. El siguiente ejemplo de código muestra cómo crear un cliente MongoDB que se autentica mediante 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);

Importante

No se puede especificar un valor de propiedad que contenga la, coma () como authMechanismProperties opción de cadena de conexión, incluso si la coma está codificada con porcentaje. Para especificar un authMechanismProperties valor de propiedad que contenga una coma, configure la opción mediante el método mongoc_uri_set_mechanism_properties().

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 incluye un nombre de usuario y una contraseña en la URI de su conexión, el controlador 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 usar estas variables de entorno para autenticar su aplicación, primero configúrelas con los valores de AWS IAM 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, configure el parámetro authMechanism en su 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);

El controlador C puede recuperar automáticamente las credenciales temporales de AWS desde una instancia de Amazon Elastic Cloud Compute (EC2). Para usar las credenciales temporales desde una instancia de EC2, configure el parámetro authMechanism en la URI de conexión como "MONGODB-AWS" mediante 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 configura alguna de las variables de entorno de los métodos de autenticación de AWS anteriores, el controlador C intentará recuperar las credenciales mediante esos métodos antes de intentar recuperarlas de una instancia EC2. Para intentar recuperar las credenciales solo de una instancia EC2, asegúrese de que las variables de entorno no estén configuradas.

Para obtener más información sobre cómo autenticar su aplicación en el controlador C, consulte la siguiente documentación de API:

Volver

Configuración de TLS

En esta página