Docs 菜单
Docs 主页
/ / /
PHP 库手册
/

身份验证机制

在此页面上

  • Overview
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-X509
  • MONGODB-AWS
  • MongoDB\Client Credentials
  • 环境变量
  • AssumeRoleWithWebIdentity 请求
  • ECS Metadata
  • EC 2实例元数据
  • 更多信息
  • API 文档

本指南介绍了可在PHP库中用于对用户进行身份验证的机制。

重要

百分比编码

您必须进行 百分号编码 用户名和密码,然后再将其包含在MongoDB URI 中。您可以使用rawurlencode() 3986方法,根据 RFC 中指定的 URI 语法对这些值进行编码。在将用户名或密码通过选项大量参数传递给MongoDB\Client 构造函数时,不要对用户名或密码进行百分号编码。

要了解详情,请参阅以下资源:

  • RFC 3986

  • rawurlencode 在PHP手册中

SCRAM -SHA-256 ,如 RFC7677 所定义 ,是运行MongoDB Server v 的MongoDB部署上的默认身份验证机制。4 0或更高版本。

要使用此机制进行身份验证,请设置以下连接选项:

  • username:要进行身份验证的用户名。 在将其包含在连接 URI 中之前,对该值进行百分比编码。

  • password:用于身份验证的密码。 在将其包含在连接 URI 中之前,对该值进行百分比编码。

  • authSource:要进行身份验证的MongoDB 数据库。默认, MongoDB PHP库根据连接 URI 中的数据库进行身份验证(如果您包含数据库)。如果没有,则会根据admin数据库进行身份验证。

  • authMechanism:设置为'SCRAM-SHA-256' 。当连接到MongoDB Server v 4.0时,设置authMechanism是可选的。

您可以通过两种方式设立这些选项:将选项大量传递给MongoDB\Client构造函数,或通过连接 URI 中的参数。

$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 ,如 RFC5802 所定义 ,是运行MongoDB Server v 的MongoDB部署上的默认身份验证机制。 。36

注意

MongoDB PHP库 v 1.20删除了对MongoDB Server v 3.6的支持。使用该库的 v 1.20 + 时,所有支持的服务器版本默认采用SCRAM SHA- 256身份验证机制。

要使用此机制进行身份验证,请使用与SCRAM-SHA- 256相同的事务语法,但将authMechanism选项的值更改为'SCRAM-SHA-1'

如果启用TLS,则在 TLS 握手期间, MongoDB PHP库可以向MongoDB提供 X. 509客户端证书以证明其身份。 MONGODB-X 509身份验证机制使用此证书对客户端进行身份验证。

要使用此机制进行身份验证,请设置以下连接选项:

  • tls:设置为true

  • tlsCertificateKeyFile:包含客户端证书和私钥的.pem文件的文件路径。

  • authMechanism:设置为'MONGODB-X509'

您可以通过两种方式设立这些选项:将选项大量传递给MongoDB\Client构造函数,或通过连接 URI 中的参数。

$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身份验证机制需要MongoDB Server v 4.4或更高版本。

MONGODB-AWS身份验证机制使用 AWS IAM(Amazon Web Services身份和访问管理)或 AWS Lambda档案对应用程序进行凭证验证。要使用此方法进行身份验证,必须指定'MONGODB-AWS'作为authMechanism连接选项的值。

注意

MongoDB PHP库使用 libmongoc 的 MONGODB-AWS身份验证机制实施。要学习;了解有关将此身份验证机制与 libmongoc 结合使用的更多信息,请参阅C驾驶员文档中的通过 AWS IAM 进行身份验证

使用凭证 -AWS 机制时,驾驶员会尝试按列出的顺序从以下来源检索AWS 档案:

  1. 作为连接 URI 的一部分或选项参数传递给MongoDB\Client的选项

  2. 环境变量

  3. AWS EKS AssumeRoleWithWebIdentity请求

  4. ECS容器元数据

  5. EC 2实例元数据

以下部分介绍如何从这些来源检索凭证并使用它们对PHP应用程序进行身份验证。

首先,驾驶员会检查您是否将凭证档案作为连接 URI 的一部分或作为$uriOptions大量参数传递给MongoDB\Client构造函数。要将您的凭证传递给MongoDB\Client ,请设立以下连接选项:

  • username:要进行身份验证的Amazon Web Services IAM 访问密钥ID 。 在将其包含在连接 URI 中之前,对该值进行百分比编码。

  • password: Amazon Web Services IAM 秘密访问密钥。 在将其包含在连接 URI 中之前,对该值进行百分比编码。

  • authMechanism:设置为'MONGODB-AWS'

您可以通过两种方式设立这些选项:将选项大量传递给MongoDB\Client构造函数,或通过连接 URI 中的参数。

$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);

如果在构造MongoDB\Client对象时未提供用户名和密码,驾驶员会尝试从以下环境变量中检索凭证档案:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN

要使用这些环境变量对应用程序进行身份验证,请先设立它们设置为身份验证所需的 AWS IAM 值。您可以在Shell中运行export命令或将变量添加到.env文件,如以下代码示例:

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>

重要

不要对这些环境变量中的值进行百分比编码。

设立这些环境变量后,设立authMechanism连接选项设置为'MONGODB-AWS'

以下示例设置authMechanism连接选项。您可以通过两种方式设立此选项:将选项大量传递给MongoDB\Client构造函数,或通过连接 URI 中的参数。

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>',
['authMechanism' => 'MONGODB-AWS']
);
$uri = 'mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS';
$client = new MongoDB\Client($uri);

提示

AWS Lambda

AWS Lambda 运行时可以在初始化期间自动设置这些环境变量。有关在 AWS Lambda 环境中使用环境变量的更多信息,请参阅 使用 Lambda 环境变量 在 AWS 文档中。

如果您的应用程序对来自 OpenID Connect (OIDC) 身份提供商程序的 EKS集群的用户进行身份验证,则驾驶员可以发出AssumeRoleWithWebIdentity请求,以将 OIDC 令牌交换为应用程序的临时 AWS凭证。

要使用 请求返回的临时 AWS IAMAssumeRoleWithWebIdentity 档案进行凭证验证,请确保您的环境中存在 AWS 配置文件并且已正确配置。要学习;了解如何创建和配置 AWS 配置文件,请参阅 配置 在 AWS 文档中。

AssumeRoleWithWebIdentity请求配置环境后,设立authMechanism连接选项设置为'MONGODB-AWS' 。要查看设置authMechanism选项的示例,请参阅本页上的authMechanism示例

提示

有关使用 AssumeRoleWithWebIdentity 请求对应用程序进行身份验证的更多信息,请参阅以下Amazon Web Services文档:

如果您的应用程序在弹性容器服务 (ECS)容器运行,则驾驶员可以自动从 ECS 端点检索临时 AWS凭证。为此,请在名为AWS_CONTAINER_CREDENTIALS_RELATIVE_URI的环境变量中指定 ECS 端点的 URI。您可以通过运行export Shell命令或将其添加到.env文件来设立此变量,如以下示例所示:

export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<URI of the ECS endpoint>
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<URI of the ECS endpoint>

设立环境变量后,设立authMechanism连接选项设置为'MONGODB-AWS' 。要查看设置authMechanism选项的示例,请参阅本页上的authMechanism示例

该驾驶员可以自动从Amazon Elastic Cloud Compute (EC 2 )实例检索临时 AWS凭证。要使用 EC 2实例中的临时凭证,设立authMechanism连接选项设置为'MONGODB-AWS' 。要查看设置authMechanism选项的示例,请参阅本页上的authMechanism示例

注意

仅当未设立环境变量部分中描述的环境变量时, MongoDB PHP库才会从 EC 2实例检索凭证。

要学习;了解有关在MongoDB PHP库中创建MongoDB\Client对象的更多信息,请参阅创建MongoDB客户端指南。

要学习;了解有关MongoDB\Client类的详情,请参阅库API文档中的MongoDB\Client

要查看可传递给 的 URIMongoDB\Client 选项的完整列表,请参阅 MongoDB\ 驱动程序\ 经理::__construct() 参数 在扩展API文档中。

后退

保护您的数据