Overview
En esta guía, puedes aprender a utilizar cada mecanismo de autenticación disponible en la Community Edition de MongoDB. MongoDB utiliza mecanismos de autenticación para confirmar una identidad y establecer la confianza para garantizar la seguridad en el driver y el servidor antes de conectarse.
Para autenticarse usando GSSAPI/Kerberos o LDAP, revisa el
Página de fundamentos de mecanismos de autenticación de empresa. Para obtener más información sobre cómo establecer una conexión con el clúster de MongoDB, consulta la Guía de conexión.
Mecanismos soportados
El controlador de Go soporta los siguientes mecanismos de autenticación:
El Go Driver establece una conexión con un mecanismo de autenticación a través de un tipo Cliente. El tipo Client especifica el mecanismo y las credenciales que se utilizarán como opciones de conexión en un tipo Credencial . Para configurar estas opciones, pasa un tipo Credential al método SetAuth() del tipo ClientOptions.
Las siguientes secciones demuestran este proceso usando los cinco mecanismos que admite la Community Edition de MongoDB.
Convenciones de ejemplo
Cada mecanismo de autenticación contiene los siguientes placeholders:
db_username- Su nombre de usuario de la base de datos MongoDBdb_password- La contraseña del usuario de base de datos MongoDBhostname- La dirección de red de tus servidores MongoDB, accesible por tu clienteport- El número de puerto de tus servidores de MongoDBauthenticationDb- Su base de datos MongoDB que contiene los datos de autenticación del usuario. Si omite esta opción, el driver utiliza el valor por defectoadmin.
predeterminado
El mecanismo predeterminado utiliza uno de los siguientes mecanismos de autenticación dependiendo de las versiones de MongoDB que soporte tu servidor:
Mecanismo | Versiones |
|---|---|
| MongoDB 4.0 y versiones posteriores |
| MongoDB 3.0, 3.2, 3.4 y 3.6 |
| MongoDB 2.6 y anteriores |
Para especificar el mecanismo de autenticación por defecto, omite la opción AuthMechanism:
credential := options.Credential{ AuthSource: "<authenticationDb>", Username: "<db_username>", Password: "<db_password>", } clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>"). SetAuth(credential) client, err := mongo.Connect(context.TODO(), clientOpts)
Para más información sobre los mecanismos de autenticación de challenge-response (CR) y de challenge-response con sal (SCRAM) que soporta MongoDB, consulte la sección SCRAM del manual del servidor.
SCRAM-SHA-256
Importante
SCRAM-SHA-256 es el método de autenticación por defecto para MongoDB a partir de MongoDB 4.0.
SCRAM-SHA-256 es un mecanismo de autenticación por desafío y respuesta con sal (SCRAM) que usa tu nombre de usuario y contraseña de base de datos, cifrados con el algoritmo SHA-256, para autenticar al usuario.
Para especificar el mecanismo de autenticación SCRAM-SHA-256, asigne el valor "SCRAM-SHA-256" a la opción AuthMechanism:
credential := options.Credential{ AuthMechanism: "SCRAM-SHA-256", AuthSource: "<authenticationDb>", Username: "<db_username>", Password: "<db_password>", } clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>"). SetAuth(credential) client, err := mongo.Connect(context.TODO(), clientOpts)
SCRAM-SHA-1
Importante
SCRAM-SHA-1 es el método de autenticación por defecto para las versiones 3.0, 3.2, 3.4 y 3.6 de MongoDB.
SCRAM-SHA-1 es un mecanismo de desafío-respuesta salado (SCRAM) que utiliza su nombre de usuario y contraseña, cifrados mediante el algoritmo SHA-1, para autenticar a su usuario.
Para especificar el mecanismo de autenticación SCRAM-SHA-1, asigne el valor "SCRAM-SHA-1" a la opción AuthMechanism:
credential := options.Credential{ AuthMechanism: "SCRAM-SHA-1", AuthSource: "<authenticationDb>", Username: "<db_username>", Password: "<db_password>", } clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>"). SetAuth(credential) client, err := mongo.Connect(context.TODO(), clientOpts)
MONGODB-CR
MONGODB-CR es un mecanismo de autenticación de desafío-respuesta que utiliza tu nombre de usuario y contraseña para autenticar a tu usuario.
Importante
Este mecanismo de autenticación se desaprobó a partir de MongoDB 3.6 y ya no está soportado en MongoDB 4.0.
MONGODB-AWS
Importante
El mecanismo de autenticación MONGODB-AWS está disponible solo en MongoDB versiones 4.4 y posteriores.
El mecanismo de autenticación MONGODB-AWS utiliza tus credenciales de Amazon Web Services Identity and Access Gestión (AWS IAM) para autenticar a tu usuario.
Para conectarse a una instancia de MongoDB con autenticación MONGODB-AWS habilitada, especifique el mecanismo de autenticación MONGODB-AWS.
El controlador verifica tus credenciales en las siguientes fuentes, en el orden en que aparecen:
cadena de conexión.
Variables de entorno.
Archivo de token de identidad web.
Endpoint AWS ECS especificado en la variable de entorno
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI.Punto final de AWS EC2. Para obtener más información, consulta Roles IAM para tareas en la documentación de AWS.
Importante
El controlador obtiene las credenciales solo de la primera fuente en la que se encuentran. Por ejemplo, si se especifican las credenciales de AWS en la cadena de conexión, el driver ignorará cualquier otra credencial especificada en las variables de entorno.
Tip
Los siguientes ejemplos establecen las credenciales adecuadas utilizando el método SetAuth(). También puedes especificar estas credenciales utilizando el método ApplyURI(). Si utilizas el método ApplyURI(), debes codificar en URL el nombre de usuario y la contraseña para garantizar que se analicen correctamente.
Para conectarte a tu instancia de MongoDB utilizando tus credenciales de AWS IAM, realiza los siguientes pasos:
Asignar a la opción
AuthMechanismel valorMONGODB-AWSAsignar a la opción
Usernameel valor de suaccessKeyIDAsignar a la opción
Passwordel valor de susecretAccessKey
var accessKeyID, secretAccessKey string awsCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", AuthSource: "<authenticationDb>", Username: "<accessKeyID>", Password: "<secretAccessKey>", } awsIAMClient, err := mongo.Connect( context.TODO(), options.Client().SetAuth(awsCredential)) if err != nil { panic(err) } _ = awsIAMClient
Si es necesario especificar un token de sesión AWS, use las credenciales temporales devueltas de una solicitud de rol asumido.
Para utilizar credenciales temporales, asigna el valor de tu sessionToken a la opción AuthMechanismProperties:
var accessKeyID, secretAccessKey, sessionToken string assumeRoleCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", AuthSource: "<authenticationDb>", Username: "<accessKeyID>", Password: "<secretAccessKey>", AuthMechanismProperties: map[string]string{ "AWS_SESSION_TOKEN": "<sessionToken>", }, } assumeRoleClient, err := mongo.Connect(context.TODO(), options.Client().SetAuth(assumeRoleCredential))
Para autenticarse en su instancia de MongoDB mediante credenciales de AWS almacenadas en las variables de entorno, utilice una shell para establecer las variables de la siguiente manera:
export AWS_ACCESS_KEY_ID=<awsKeyId> export AWS_SECRET_ACCESS_KEY=<awsSecretKey> export AWS_SESSION_TOKEN=<awsSessionToken>
Nota
Si no necesitas un token de sesión de AWS para el rol con el que te estás autenticando, omite la línea que contiene AWS_SESSION_TOKEN.
Tras haber configurado las variables de entorno anteriores, especifica el mecanismo de autenticación MONGODB-AWS como se muestra en el siguiente ejemplo:
envVariablesCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", } envVariablesClient, err := mongo.Connect( context.TODO(), options.Client().SetAuth(envVariablesCredential)) if err != nil { panic(err) } _ = envVariablesClient
Puedes utilizar el token OpenID Connect (OIDC) obtenido de un proveedor de identidad web para autenticarte en Amazon Elastic Kubernetes Service (EKS) u otros servicios. Para utilizar un token OIDC, crea o localiza el archivo que contiene el token. Luego, establece las siguientes variables de entorno:
AWS_WEB_IDENTITY_TOKEN_FILEEstablece la ruta absoluta del archivo que contiene tu token OIDC.AWS_ROLE_ARN: Establecido en el rol de IAM utilizado para conectarse al clúster. Por ejemplo:arn:aws:iam::111122223333:role/my-role.
El siguiente comando de shell configura estas variables de entorno:
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file that contains OIDC token> export AWS_ROLE_ARN=<IAM role name>
Después de establecer las variables de entorno anteriores, se debe especificar el mecanismo de autenticación MONGODB-AWS como se muestra en el siguiente ejemplo:
envVariablesCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", } envVariablesClient, err := mongo.Connect( context.TODO(), options.Client().SetAuth(envVariablesCredential)) if err != nil { panic(err) } _ = envVariablesClient
X.509
El mecanismo de autenticación X.509 utiliza TLS con certificados X.509 para autenticar al usuario, identificado por los nombres distinguidos relativos (RDNs) del certificado de cliente. Cuando especificas el mecanismo de autenticación X.509, el servidor autentica la conexión utilizando las rutas de los siguientes archivos:
tlsCAFileque contiene una única o un conjunto de autoridades certificadoras en las que confiar al establecer una conexión TLStlsCertificateKeyFileque hace referencia a la ruta del archivo del certificado de cliente o del archivo de la clave privada del cliente
Para especificar el mecanismo de autenticación X.509, realiza lo siguiente:
Asignar al
tlsCAFilela ruta a su archivo en la cadena de conexiónAsignar al
tlsCertificateKeyFilela ruta a su archivo en la cadena de conexiónAsignar a la opción
AuthMechanismel valor"MONGODB-X509"
caFilePath := "<cafile_path>" certificateKeyFilePath := "<client_certificate_path>" uri := "mongodb://<hostname>:<port>/?tlsCAFile=%s&tlsCertificateKeyFile=%s" uri = fmt.Sprintf(uri, caFilePath, certificateKeyFilePath) credential := options.Credential{ AuthMechanism: "MONGODB-X509", } clientOpts := options.Client().ApplyURI(uri).SetAuth(credential)