身份验证机制
本页内容
概述
本指南描述了您可以在 C++ 驱动程序中使用以进行用户身份验证的机制。
SCRAM-SHA-256
SCRAM-SHA-256,定义于RFC 7677是MongoDB v4.0或更高版本部署上的默认身份验证机制。
要使用此机制进行身份验证,请设置以下连接选项
db_username
:用于身份验证的数据库用户名。db_password
:用于身份验证的数据库密码。authSource
:要对其进行身份验证的MongoDB数据库。默认情况下,C++驱动程序将连接URI中的数据库进行身份验证,如果包含一个。如果不包含,则身份验证对admin
数据库。authMechanism
:设置为"SCRAM-SHA-256"
。
您可以在创建mongocxx::client
对象时设置这些选项,如下例所示
auto uri = mongocxx::uri("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "authSource=admin&authMechanism=SCRAM-SHA-256"); auto client = mongocxx::client(uri);
SCRAM-SHA-1
SCRAM-SHA-1,如由RFC 5802定义,是MongoDB v3.6版本部署中的默认认证机制。
要使用此机制进行身份验证,请设置以下连接选项
db_username
:认证用的用户名。db_password
:认证用的密码。authSource
:要认证的MongoDB数据库。默认情况下,C++驱动程序认证admin
数据库。authMechanism
:设置为"SCRAM-SHA-1"
。
您可以在创建mongocxx::client
对象时设置这些选项,如下例所示
auto uri = mongocxx::uri("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "authSource=admin&authMechanism=SCRAM-SHA-1"); auto client = mongocxx::client(uri);
MONGODB X.509
如果您启用TLS,在TLS握手过程中,C++驱动程序可以向MongoDB展示X.509客户端证书以证明其身份。《MONGODB-X509》认证机制使用此证书来认证客户端。
要使用此机制进行身份验证,请设置以下连接选项
tls
:设置为True
。tlsCertificateKeyFile
:包含您的客户端证书和私钥的.pem
文件的路径。authMechanism
:设置为"MONGODB-X509"
。
您可以在创建mongocxx::client
对象时设置这些选项,如下例所示
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "tls=true&tlsCertificateKeyFile=path/to/client.pem&authMechanism=MONGODB-X509"); auto client = mongocxx::client(uri);
有关启用TLS的更多信息,请参阅配置传输层安全性(TLS).
mongodb-aws
重要
mongodb-aws认证机制需要MongoDB v4.4或更高版本。
MONGODB-AWS
认证机制使用AWS IAM(Amazon Web Services Identity and Access Management)或AWS Lambda凭证来认证您的应用程序。要使用此机制进行认证,首先在$external
数据库上创建一个具有相关Amazon资源名称(ARN)的用户,然后在URI中指定MONGODB-AWS
authMechanism。
当您使用MONGODB-AWS
机制时,C++驱动程序将按以下顺序尝试从以下来源检索您的AWS凭证
传递给连接URI的命名参数
环境变量
AWS EKS AssumeRoleWithWebIdentity请求
ECS容器元数据
EC2实例元数据
以下各节描述了如何使用C++驱动程序从这些来源检索凭证,并使用它们来认证您的应用程序。
连接URI
首先,C++驱动程序会检查您是否将AWS凭证传递给MongoClient
构造函数,作为连接URI的一部分。要将凭证传递到连接URI中,设置以下连接选项
username
:用于认证的AWS IAM访问密钥ID。password
:AWS IAM秘密访问密钥。authMechanism
:设置为"MONGODB-AWS"
。
您可以在创建mongocxx::client
对象时设置这些选项,如下例所示
auto uri = mongocxx::uri("mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
您还可以通过传递到authMechanismProperties
参数中包含AWS会话令牌。
auto uri = mongocxx::uri("mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?" "authMechanism=MONGODB-AWSS&authMechanismProperties=AWS_SESSION_TOKEN:<token>"); auto client = mongocxx::client(uri);
环境变量
如果在构建 MongoClient
对象时未提供用户名和密码,C++ 驱动程序将尝试从以下环境变量中检索 AWS 凭据
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN
(可选)
要使用这些环境变量来验证您的应用程序,首先将它们设置为用于验证的 AWS IAM 值,如下所示代码示例
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>
设置这些环境变量后,将您的连接 URI 中的 authMechanism
参数设置为 "MONGODB-AWS"
,如下例所示
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
AssumeRoleWithWebIdentity 请求
如果您的应用程序从 OpenID Connect (OIDC) 身份提供者验证您的 EKS 集群的用户,C++ 驱动程序可以发出 AssumeRoleWithWebIdentity
请求,以交换 OIDC 令牌以获取您的应用程序的临时 AWS 凭据。
为了使用由 AssumeRoleWithWebIdentity
请求返回的临时 AWS IAM 凭证进行身份验证,请确保您的环境中存在 AWS 配置文件,并使用 AWS_WEB_IDENTITY_TOKEN_FILE
和 AWS_ROLE_ARN
环境变量进行配置。有关创建和配置 AWS 配置文件的说明,请参阅 AWS 文档中的配置。
在配置您的环境以使用 AssumeRoleWithWebIdentity
请求后,将您的连接 URI 中的 authMechanism
参数设置为 "MONGODB-AWS"
,如下例所示
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
有关使用 AssumeRoleWithWebIdentity
请求对您的应用程序进行身份验证的更多信息,请参阅以下 AWS 文档
ECS 元数据
如果您的应用程序运行在 Elastic Container Service (ECS) 容器中,C++ 驱动程序可以自动从 ECS 端点检索临时 AWS 凭证。为此,请指定名为 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
的环境变量中的 ECS 端点 URI,如下例所示
export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=<URI of the ECS endpoint>
设置环境变量后,将您的连接 URI 中的 authMechanism
参数设置为 "MONGODB-AWS"
,如下例所示
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
EC2实例元数据
C++驱动程序可以自动从Amazon弹性云计算(EC2)实例中检索临时AWS凭证。要在EC2实例内部使用临时凭证,请将您的连接URI中的authMechanism
参数设置为"MONGODB-AWS"
,如下例所示
auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?" "authMechanism=MONGODB-AWS"); auto client = mongocxx::client(uri);
注意
如果您设置了前面提到的任何AWS身份验证方法中的环境变量,C++驱动程序将尝试使用这些方法检索凭证,然后再尝试从EC2实例中检索凭证。要仅尝试从EC2实例中检索凭证,请确保环境变量没有设置。
API文档
要了解更多关于在C++驱动程序中创建mongocxx::client
对象的信息,请参阅以下API文档