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