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 Amazon Web Services IAM
- Credenciais Amazon Web Services via URI
- Credenciais Amazon Web Services via ambiente
- Credenciais Amazon Web Services via ECS
- Credenciais Amazon Web Services 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 string de conexão (e um banco de 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 string de conexão authMechanism são:
Autenticação básica (SCRAM-SHA-256)
O MongoDB introduz suporte para autenticação usando o protocolo SCRAM com o hash SHA- mais seguro 4.0 256 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 com credenciais SCRAM-SHA-1 e SCRAM-SHA-256 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");
Autenticação básica (SCRAM-SHA-1)
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 banco de dados admin
por padrão. Se o usuário for criado em outro banco de dados de dados, será necessário especificar a authSource.
Autenticação legada (MONGODB-CR)
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.
Autenticação GSSAPI (Kerberos)
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 banco de dados do $external
, portanto, não é necessário especificar o banco de banco de dados authSource.
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 banco de dados Kerberos . O padrão é "falso".SERVICE_NAME
: Use um nome de serviço diferente do padrão, "MongoDB".
Defina 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 aplicação 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
Autenticação simples SASL
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 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 banco de dados do $external
, portanto, não é necessário especificar o banco de banco de dados authSource.
Autenticação do certificado X.509
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 banco de dados do $external
, portanto, não é necessário especificar o banco de banco de dados authSource. 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 , não é necessário fornecer o nome de usuário.
Autenticação via Amazon Web Services IAM
O mecanismo MONGODB-AWS
autentica em servidores MongoDB com credenciais fornecidas pelo Amazon Web Services Identity e Access Management (IAM).
Para autenticar, crie um usuário com um nome de recurso da Amazon (ARN) associado no banco de 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 MONGODB-AWS
sempre autentica no banco de banco de dados $external
, a especificação do banco de banco de dados authSource não é necessária.
As credenciais incluem access key id
, secret access key
e session token
opcional. Eles podem ser obtidos das seguintes maneiras.
Credenciais Amazon Web Services via URI
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>");
Credenciais Amazon Web Services via ambiente
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 (optional)
Credenciais Amazon Web Services via ECS
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.
Credenciais Amazon Web Services via EC2
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.