Overview
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
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 datosadmin.authMechanism: Establecer enSCRAM-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
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 datosadmin.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);
MONGODB-X509
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:
Crea una estructura
mongoc_ssl_opt_t. En esta estructura, establece el campopem_fileen la ruta del archivo.pemque contiene tu certificado de cliente y llave privada.En tu URI de conexión, establece la opción de conexión
authMechanismen"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);
MONGODB-AWS
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:
Parámetros nombrados pasados a la URI de conexión
Variables de entorno
Solicitud de AWS EKS AssumeRoleWithWebIdentity
Metadatos de contenedor ECS
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.
URI de conexió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);
Variables de entorno
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_IDAWS_SECRET_ACCESS_KEYAWS_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);
ECS Metadata
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);
Metadatos de instancia EC2
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.
Documentación de la API
Para aprender más sobre cómo autenticar tu aplicación en el driver C, consulta la siguiente documentación de la API: