Mecanismos de autenticação
Nesta página
Visão geral
Este guia descreve os mecanismos que você pode usar na biblioteca PHP para autenticar usuários.
Importante
Codificação percentual
Você precisa codificar por cento um nome de usuário e senha antes de incluí-los em um URI MongoDB . Você pode usar o método rawurlencode()
para codificar esses valores de acordo com a sintaxe do URI especificada em RFC 3986. Não codifique o nome de usuário ou a senha ao passá-los em um parâmetro de array de opções para o construtor MongoDB\Client
.
Para saber mais, consulte os seguintes recursos:
código bruto no manual do PHP
SCRAM-SHA-256
SCRAM-SHA-256, conforme definido por RFC 7677, é o mecanismo de autenticação padrão em MongoDB que executam o MongoDB Server v4.0 ou mais tarde.
Para autenticar com esse mecanismo, defina as seguintes opções de conexão:
username
: o nome de usuário para autenticar. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.password
: A senha para autenticar. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.authSource
: O banco de banco de dados MongoDB para autenticar. Por padrão, a biblioteca PHP do MongoDB autentica no banco de banco de dados no URI de conexão, se você incluir um. Caso contrário, ele autentica no banco de banco de dados doadmin
.authMechanism
: Defina como'SCRAM-SHA-256'
. Quando conectado ao MongoDB Server v4.0, configurarauthMechanism
é opcional.
Você pode definir essas opções de duas maneiras: passando uma array de opções para o construtor MongoDB\Client
ou por meio de parâmetros em seu URI de conexão.
$uriOptions = [ 'username' => '<username>', 'password' => '<password>', 'authSource' => '<authentication database>', 'authMechanism' => 'SCRAM-SHA-256', ]; $client = new MongoDB\Client( 'mongodb://<hostname>:<port>', $uriOptions, );
$uri = 'mongodb://<username>:<password>@<hostname>:<port>/?authSource=admin&authMechanism=SCRAM-SHA-256'; $client = new MongoDB\Client($uri);
SCRAM-SHA-1
SCRAM-SHA-1, conforme definido por RFC 5802, é o mecanismo de autenticação padrão em MongoDB que executam o MongoDB Server v3.6.
Observação
Biblioteca PHP do MongoDB v1.20 elimina o suporte para o MongoDB Server v3.6. Ao usar v1.20+ da biblioteca, todas as versões de servidor suportadas têm como padrão o mecanismo de autenticação SCRAM-SHA-256 .
Para autenticar com esse mecanismo, use a mesma sintaxe que SCRAM-SHA-256, mas altere o valor da opção authMechanism
para 'SCRAM-SHA-1'
.
MONGODB-X509
Se você habilitar o TLS, durante a negociação do TLS, a Biblioteca PHP do MongoDB poderá apresentar um certificado de cliente X.509 ao MongoDB para provar sua identidade. O mecanismo de autenticação MONGODB-X509 utiliza este certificado para autenticar o cliente.
Para autenticar com esse mecanismo, defina as seguintes opções de conexão:
tls
: Defina comotrue
.tlsCertificateKeyFile
: o caminho do arquivo.pem
que contém seu certificado de cliente e chave privada.authMechanism
: Defina como'MONGODB-X509'
.
Você pode definir essas opções de duas maneiras: passando uma array de opções para o construtor MongoDB\Client
ou por meio de parâmetros em seu URI de conexão.
$uriOptions = [ 'tls' => true, 'tlsCertificateKeyFile' => '<file path>', 'authMechanism' => 'MONGODB-X509', ]; $client = new MongoDB\Client( 'mongodb://<hostname>:<port>', $uriOptions, );
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=<file path>&authMechanism=MONGODB-X509'; $client = new MongoDB\Client($uri);
MONGODB-AWS
Importante
O mecanismo de autenticação MONGODB-AWS requer MongoDB Server v4.4 ou posterior.
O mecanismo de autenticação do MONGODB-Amazon Web Services utiliza credenciais do Amazon Web Services IAM (Amazon Web Services Identity and Access Management) ou Amazon Web Services Lambda para autenticar seu aplicação. Para usar esse método de autenticação, você deve especificar 'MONGODB-AWS'
como o valor da opção de conexão authMechanism
.
Observação
A biblioteca PHP do MongoDB usa a implementação da libmongoc do mecanismo de autenticação MONGODB-AWS. Para saber mais sobre como usar esse mecanismo de autenticação com libmongoc, consulte Autenticação via Amazon Web Services IAM na documentação do driver C.
Quando você usa o mecanismo MONGODB-Amazon Web Services , o driver tenta recuperar as credenciais do Amazon Web Services das seguintes fontes, na ordem listada:
Opções passadas para
MongoDB\Client
como parte do URI de conexão ou um parâmetro de opçõesVariáveis de ambiente
Solicitação Amazon Web Services EKS
AssumeRoleWithWebIdentity
Metadados do container ECS
Metadados de instância do EC2
As seções a seguir descrevem como recuperar credenciais dessas fontes e utilizá-las para autenticar seu aplicação PHP.
MongoDB\ClientCredentials
Primeiro, o driver verifica se você passou as credenciais do Amazon Web Services para o construtor MongoDB\Client
, como parte do URI de conexão ou do parâmetro da array $uriOptions
. Para passar suas credenciais para MongoDB\Client
, defina as seguintes opções de conexão:
username
: O ID da chave de acesso do Amazon Web Services IAM para autenticar. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.password
: A chave de acesso secreto IAM do Amazon Web Services. Porcentagem Codifique esse valor antes de incluí-lo em um URI de conexão.authMechanism
: Defina como'MONGODB-AWS'
.
Você pode definir essas opções de duas maneiras: passando uma array de opções para o construtor MongoDB\Client
ou por meio de parâmetros em seu URI de conexão.
$uriOptions = [ 'username' => '<AWS IAM access key ID>', 'password' => '<AWS IAM secret access key>', 'authMechanism' => 'MONGODB-AWS', ]; $client = new MongoDB\Client( 'mongodb://<hostname>:<port>', $uriOptions, );
$uri = 'mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?authMechanism=MONGODB-AWS'; $client = new MongoDB\Client($uri);
Variáveis de ambiente
Se você não fornecer um nome de usuário e senha ao construir seu objeto MongoDB\Client
, o driver tentará recuperar as credenciais do Amazon Web Services a partir das seguintes variáveis de ambiente:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN
Para usar essas variáveis de ambiente para autenticar seu aplicação, primeiro defina-as para os valores do Amazon Web Services IAM necessários para a autenticação. Você pode executar o comando export
em seu shell ou adicionar as variáveis a um arquivo .env
, conforme mostrado no exemplo de código a seguir:
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>
AWS_ACCESS_KEY_ID=<AWS IAM access key ID> AWS_SECRET_ACCESS_KEY=<AWS IAM secret access key> AWS_SESSION_TOKEN=<AWS session token>
Importante
Não codifique os valores nessas variáveis de ambiente.
Após configurar estas variáveis de ambiente, configure a opção de conexão do authMechanism
para 'MONGODB-AWS'
.
Exemplo
O exemplo a seguir define a opção de conexão authMechanism
. Você pode definir essa opção de duas maneiras: passando uma array de opções para o construtor MongoDB\Client
ou por meio de um parâmetro em seu URI de conexão.
$client = new MongoDB\Client( 'mongodb://<hostname>:<port>', ['authMechanism' => 'MONGODB-AWS'] );
$uri = 'mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS'; $client = new MongoDB\Client($uri);
Dica
AWS Lambda
Os tempos de execução Amazon Web Services Lambda podem definir automaticamente essas variáveis de ambiente durante a inicialização. Para obter mais informações sobre o uso de variáveis de ambiente em um Amazon Web Services Lambda ambiente do , consulte Uso de Lambda variáveis de ambiente do na documentação do Amazon Web Services .
Solicitação AssumeRoleWithWebIdentity
Se o seu aplicação autenticar usuários para o seu cluster EKS a partir de um provedor de identidade OpenID Connect (OIDC), o driver poderá fazer uma solicitação do AssumeRoleWithWebIdentity
para trocar o token OIDC por credenciais temporárias do Amazon Web Services para seu aplicação.
Para autenticar com credenciais temporárias Amazon Web Services IAM retornadas por uma solicitação de AssumeRoleWithWebIdentity
, verifique se o arquivo de configuração do Amazon Web Services existe em seu ambiente e está configurado corretamente. Para saber como criar e configurar um Amazon Web Services arquivo de configuração do , consulte Configuração na documentação do Amazon Web Services .
Após configurar seu ambiente para uma solicitação do AssumeRoleWithWebIdentity
, configure a opção de conexão do authMechanism
para 'MONGODB-AWS'
. Para visualizar um exemplo que define a opção authMechanism
, consulte o exemplo authMechanism nesta página.
Dica
Para obter mais informações sobre como usar uma solicitação AssumeRoleWithWebIdentity
para autenticar seu aplicativo, consulte a seguinte documentação do Amazon Web Services:
ECS Metadata
Se o seu aplicação for executado em um container do Elastic Container Service (ECS), o driver poderá recuperar automaticamente credenciais temporárias Amazon Web Services de um endpoint do ECS. Para fazer isso, especifique o URI do ponto de extremidade ECS em uma variável de ambiente chamada AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
. Você pode definir essa variável executando o comando shell export
ou adicionando-a ao arquivo .env
, conforme mostrado no exemplo a seguir:
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<URI of the ECS endpoint>
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<URI of the ECS endpoint>
Após configurar a variável de ambiente, configure a opção de conexão do authMechanism
para 'MONGODB-AWS'
. Para visualizar um exemplo que define a opção authMechanism
, consulte o exemplo authMechanism nesta página.
EC2 Metadados de instância
O driver pode recuperar automaticamente credenciais temporárias Amazon Web Services de uma instância do Amazon Elastic Cloud Compute (EC2). Para usar credenciais temporárias de dentro de uma instância do EC2 , configure a opção de conexão do authMechanism
para 'MONGODB-AWS'
. Para visualizar um exemplo que define a opção authMechanism
, consulte o exemplo authMechanism nesta página.
Observação
A biblioteca PHP do MongoDB recupera credenciais de uma instância do EC2 somente se as variáveis de ambiente descritas na seção Variáveis de ambiente não estiverem definidas.
Informações adicionais
Para saber mais sobre como criar um objeto MongoDB\Client
na Biblioteca PHP do MongoDB , consulte o guia Criar um cliente MongoDB .
Documentação da API
Para saber mais sobre a classe MongoDB\Client
, consulte MongoDB\Client
na documentação da API da biblioteca.
Para ver uma lista completa de opções de URI que você pode passar para um MongoDB\Client
, consulte MongoDB\Driver\Manager::__construct() Parameters na documentação da API da extensão.