身份验证机制
在此页面上
Overview
本指南介绍了可在PHP库中用于对用户进行身份验证的机制。
重要
百分比编码
您必须进行 百分号编码 用户名和密码,然后再将其包含在MongoDB URI 中。您可以使用 rawurlencode()
方法,根据 RFC 3986中指定的 URI 语法对这些值进行编码。 在将用户名或密码通过选项大量参数传递给MongoDB\Client
构造函数时,不要对用户名或密码进行百分号编码。
要了解详情,请参阅以下资源:
rawurlencode 在PHP手册中
SCRAM-SHA-256
SCRAM -SHA-256 ,如 RFC7677 所定义 ,是运行MongoDB Server v 的MongoDB部署上的默认身份验证机制。40或更高版本。
要使用此机制进行身份验证,请设置以下连接选项:
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
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'
。
MONGODB-X509
如果启用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-AWS身份验证机制需要MongoDB Server v 4.4或更高版本。
MONGODB- Amazon Web Services身份验证机制使用Amazon Web Services IAM( Amazon Web Services身份和访问管理)或Amazon Web Services Lambda档案对应用程序进行凭证验证。 要使用此方法进行身份验证,必须指定'MONGODB-AWS'
作为authMechanism
连接选项的值。
注意
MongoDB PHP库使用 libmongoc 的 MONGODB-AWS身份验证机制实施。 要学习;了解有关将此身份验证机制与 libmongoc 结合使用的更多信息,请参阅C驾驶员文档中的通过Amazon Web Services IAM 进行身份验证。
当您使用凭证 - Amazon Web Services机制时,驾驶员会尝试按列出的顺序从以下源检索Amazon Web Services档案:
作为连接 URI 的一部分或选项参数传递给
MongoDB\Client
的选项环境变量
Amazon Web Services EKS
AssumeRoleWithWebIdentity
请求ECS容器元数据
EC 2实例元数据
以下部分介绍如何从这些来源检索凭证并使用它们对PHP应用程序进行身份验证。
MongoDB\Client Credentials
首先,驾驶员检查您是否将Amazon Web Services凭证传递给 MongoDB\Client
构造函数,作为连接 URI 的一部分或 $uriOptions
大量参数。 要将您的凭证传递给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
对象时未提供用户名和密码,驾驶员会尝试从以下环境变量中检索Amazon Web Services凭证:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN
要使用这些环境变量对应用程序进行身份验证,请先设立它们设置为身份验证所需的Amazon Web Services 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
Amazon Web Services Lambda运行时可以在初始化期间自动设立这些环境变量。 有关在Amazon Web ServicesLambda 环境中使用环境变量的更多信息,请参阅 使用Lambda 环境变量 在Amazon Web Services 文档中。
AssumeRoleWithWebIdentity 请求
如果您的应用程序通过 OpenID Connect (OIDC) 身份提供商对 EKS集群的用户进行身份验证,则驾驶员可以发出 AssumeRoleWithWebIdentity
请求,用 OIDC 令牌交换应用程序的临时Amazon Web Services凭证。
要使用 AssumeRoleWithWebIdentity
请求返回的临时Amazon Web Services IAM凭证进行身份验证,请确保您的环境中存在Amazon Web Services配置文件并且已正确配置。 要学习;了解如何创建和配置Amazon Web Services 配置文件,请参阅 配置 在Amazon Web Services 文档中。
为AssumeRoleWithWebIdentity
请求配置环境后,设立authMechanism
连接选项设置为'MONGODB-AWS'
。 要查看设置authMechanism
选项的示例,请参阅本页上的authMechanism示例。
提示
有关使用 AssumeRoleWithWebIdentity
请求对应用程序进行身份验证的更多信息,请参阅以下Amazon Web Services文档:
ECS Metadata
如果您的应用程序在弹性容器服务 (ECS)容器运行,则驾驶员可以自动从 ECS 端点检索临时Amazon Web Services凭证。 为此,请在名为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示例。
EC 2实例元数据
驾驶员可以自动从Amazon Web Services AmazonElastic Cloud Compute (EC)实例检索临时2 凭证。要使用 EC 2实例中的临时凭证,设立authMechanism
连接选项设置为'MONGODB-AWS'
。 要查看设置authMechanism
选项的示例,请参阅本页上的authMechanism示例。
注意
仅当未设立环境变量部分中描述的环境变量时, MongoDB PHP库才会从 EC 2实例检索凭证。
更多信息
要学习;了解有关在MongoDB PHP库中创建MongoDB\Client
对象的更多信息,请参阅创建MongoDB客户端指南。
API 文档
要学习;了解有关MongoDB\Client
类的详情,请参阅库API文档中的MongoDB\Client
。
要查看可传递给 的 URIMongoDB\Client
选项的完整列表,请参阅 MongoDB\ 驱动程序\ 经理::__construct() 参数 在扩展API文档中。