Menu Docs
Página inicial do Docs
/ / /
Driver C
/

Autenticação

Nesta página

  • Autenticação básica (SCRAM-SHA-256)
  • Autenticação básica (SCRAM-SHA-1)
  • Autenticação legada (MONGODB-CR)
  • Autenticação GSSAPI (Kerberos)
  • Autenticação simples SASL
  • Autenticação do certificado X.509
  • Autenticação via AWS IAM
  • Credenciais AWS via URI
  • Credenciais AWS por meio do ambiente
  • Credenciais AWS via ECS
  • Credenciais AWS via EC2

Este guia aborda o uso de opções de autenticação com o driver MongoDB C. Certifique-se de que o servidor MongoDB também esteja configurado corretamente para autenticação antes de fazer uma conexão. Para obter mais informações, consulte adocumentação de segurança do MongoDB .

O driver MongoDB C oferece suporte a vários mecanismos de autenticação por meio do uso de URIs de conexão do MongoDB.

Por padrão, se um nome de usuário e senha forem fornecidos como parte da connection string (e um banco de dados de autenticação opcional), eles serão usados para se conectar por meio do mecanismo de autenticação padrão do servidor.

Para selecionar um mecanismo de autenticação específico diferente do padrão, consulte a lista de mecanismos suportados abaixo.

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb");

Os valores atualmente suportados para a opção de connection string authMechanism são:

MongoDB 4.0 introduz suporte para autenticação usando o protocolo SCRAM com o hash SHA- mais seguro256 descrito em RFC 7677. Usar esse mecanismo de autenticação significa que a senha nunca é realmente enviada pela rede durante a autenticação, mas sim uma prova computada de que a senha do cliente é igual à senha que o servidor conhece. No MongoDB 4.0, o driver C pode determinar o mecanismo de autenticação padrão correto para usuários com1 256 credenciais SCRAM-SHA- e SCRAM-SHA- armazenadas:

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb");
/* the correct authMechanism is negotiated between the driver and server. */

Como alternativa, o SCRAM-SHA-256 pode ser explicitamente especificado como um authMechanism.

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-256&authSource=mydb");

O mecanismo de autenticação padrão antes do MongoDB 4.0 é SCRAM-SHA-1 (RFC 5802). Usar esse mecanismo de autenticação significa que a senha nunca é realmente enviada pela rede durante a autenticação, mas sim uma prova computada de que a senha do cliente é igual à senha que o servidor conhece.

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-1&authSource=mydb");

Observação

SCRAM-SHA-1 autentica no banco de dados admin por padrão. Se o usuário for criado em outro banco de dados, será necessário especificar a authSource.

O authMechanism do MONGODB-CR está obsoleto e não funcionará mais no MongoDB 4.0. Em vez disso, não especifique nenhum authMechanism e o driver usará um mecanismo de autenticação compatível com o seu servidor.

Observação

Em ambientes do tipo UNIX, o suporte Kerberos requer a compilação do driver cyrus-sasl.

No Windows, o suporte ao Kerberos requer a compilação do driver no Windows Native SSLI ou cyrus-sasl. A configuração padrão do driver usará o Windows Native SSLPI.

Para modificar a configuração padrão, use a opção cmake ENABLE_SASL.

GSSAPI A autenticação (Kerberos) está disponível na edição Enterprise do MongoDB. Para autenticar usando o GSSAPI, o driver MongoDB C deve ser instalado com suporte SASL.

Em ambientes do tipo UNIX, execute o comando kinit antes de usar os seguintes métodos de autenticação:

$ kinit mongodbuser@EXAMPLE.COM
mongodbuser@EXAMPLE.COM's Password:
$ klistCredentials cache: FILE:/tmp/krb5cc_1000
Principal: mongodbuser@EXAMPLE.COM
Issued Expires Principal
Feb 9 13:48:51 2013 Feb 9 23:48:51 2013 krbtgt/EXAMPLE.COM@EXAMPLE.COM

Agora autentique usando o URI MongoDB. O GSSAPI autentica no banco de dados virtual do $external , então um banco de dados não precisa ser especificado no URI. Observe que o principal Kerberos deve ser codificado para URL:

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI");

Observação

GSSAPI autentica no banco de dados do $external , portanto, especificar o banco de dados authSource não é necessário.

O driver suporta estas propriedades GSSAPI:

  • CANONICALIZE_HOST_NAME: isso pode ser necessário com o Cyrus-SASL quando os hosts relatam nomes de host diferentes do que é usado no banco de dados Kerberos. O padrão é "falso".

  • SERVICE_NAME: Use um nome de serviço diferente do padrão, "mongodb".

Definir propriedades na URL:

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI&"
"authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:true");

Se você encontrar erros como Invalid net address, verifique se o aplicativo está atrás de um firewall NAT (Network Address Translation). Em caso afirmativo, crie um ticket que use forwardable e addressless tickets Kerberos. Isso pode ser feito passando -f -A para kinit.

$ kinit -f -A mongodbuser@EXAMPLE.COM

Observação

O MongoDB C Driver deve ser compilado com suporte SASL para usar a autenticação SASL PLAIN .

O MongoDB Enterprise Edition oferece suporte ao mecanismo de autenticação SASL PLAIN , inicialmente destinado a delegar autenticação a um servidor LDAP. O uso do mecanismo SASL PLAIN é muito semelhante ao mecanismo de resposta de desafio com nomes de usuário e senhas. Esse mecanismo de autenticação usa o banco de dados virtual $external para suporte LDAP :

Observação

SASL PLAIN é um mecanismo de autenticação de texto não criptografado. É altamente recomendável conectar-se ao MongoDB usando TLS com validação de certificado ao usar o mecanismo PLAIN .

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://user:password@example.com/?authMechanism=PLAIN");

PLAIN autentica no banco de dados do $external , portanto, especificar o banco de dados authSource não é necessário.

Observação

O MongoDB C Driver deve ser compilado com suporte a TLS para X. Suporte a autenticação 509 . Depois de fazer isso, inicie um servidor com as seguintes opções:

$ mongod --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem

O mecanismo MONGODB-X509 autentica um nome de usuário derivado do nome do assunto distinto do certificado X.509 apresentado pelo driver durante a negociação TLS. Esse método de autenticação requer o uso de conexões TLS com validação de certificado.

mongoc_client_t *client;
mongoc_ssl_opt_t ssl_opts = { 0 };
ssl_opts.pem_file = "mycert.pem";
ssl_opts.pem_pwd = "mycertpassword";
ssl_opts.ca_file = "myca.pem";
ssl_opts.ca_dir = "trust_dir";
ssl_opts.weak_cert_validation = false;
client = mongoc_client_new ("mongodb://x509_derived_username@localhost/?authMechanism=MONGODB-X509");
mongoc_client_set_ssl_opts (client, &ssl_opts);

MONGODB-X509 autentica no banco de dados do $external , portanto, especificar o banco de dados authSource não é necessário. Para obter mais informações sobre o x509_derived_username, consulte o servidor MongoDB x.509 tutorial.

Observação

O driver C do MongoDB tentará determinar o nome de usuário derivado x509 quando nenhum for fornecido e, a partir do MongoDB 3.4 fornecendo o nome de usuário não é necessário.

O mecanismo MONGODB-AWS autentica em servidores MongoDB com credenciais fornecidas pelo AWS Identity e Access Management (IAM).

Para autenticar, crie um usuário com um Nome de Recurso da Amazon (ARN) associado no banco de dados do $external e especifique o MONGODB-AWS authMechanism no URI.

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost/?authMechanism=MONGODB-AWS");

Como o MONGODB-AWS sempre autentica no banco de dados do $external , então especificar o banco de dados authSource não é necessário.

As credenciais incluem access key id, secret access key e session token opcional. Eles podem ser obtidos das seguintes maneiras.

As credenciais podem ser passadas diretamente no URI como nome de usuário/senha.

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS");

Isso pode incluir um session token passado com authMechanismProperties.

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<token>");

Se as credenciais não forem passadas através do URI, a libmongoc verificará as seguintes variáveis de ambiente.

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN (opcional)

Se as credenciais não forem passadas no URI ou com variáveis de ambiente, a libmongoc verificará se a variável de ambiente AWS_CONTAINER_CREDENTIALS_RELATIVE_URI está definida e, em caso afirmativo, tentará recuperar credenciais temporárias dos metadados da tarefa ECS consultando um endereço local de link.

Se as credenciais não forem passadas no URI ou com variáveis de ambiente, e a variável de ambiente AWS_CONTAINER_CREDENTIALS_RELATIVE_URI não estiver definida, a libmongoc tentará recuperar credenciais temporárias dos metadados da máquina EC2 consultando endereços locais do link.

Dica

Veja também:

Voltar

Tutorial

Próximo

Solução básica de problemas