文档菜单
文档首页
/ / /
C++ 驱动程序
/

身份验证机制

本页内容

  • 概述
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB X.509
  • MONGODB-AWS
  • 连接 URI
  • 环境变量
  • AssumeRoleWithWebIdentity 请求
  • ECS 元数据
  • EC2 实例元数据
  • API 文档

本指南描述了您可以在 C++ 驱动程序中使用以进行用户身份验证的机制。

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,如由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);

如果您启用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 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凭证

  1. 传递给连接URI的命名参数

  2. 环境变量

  3. AWS EKS AssumeRoleWithWebIdentity请求

  4. ECS容器元数据

  5. EC2实例元数据

以下各节描述了如何使用C++驱动程序从这些来源检索凭证,并使用它们来认证您的应用程序。

首先,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);

如果您的应用程序从 OpenID Connect (OIDC) 身份提供者验证您的 EKS 集群的用户,C++ 驱动程序可以发出 AssumeRoleWithWebIdentity 请求,以交换 OIDC 令牌以获取您的应用程序的临时 AWS 凭据。

为了使用由 AssumeRoleWithWebIdentity 请求返回的临时 AWS IAM 凭证进行身份验证,请确保您的环境中存在 AWS 配置文件,并使用 AWS_WEB_IDENTITY_TOKEN_FILEAWS_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 文档

如果您的应用程序运行在 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);

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实例中检索凭证,请确保环境变量没有设置。

要了解更多关于在C++驱动程序中创建mongocxx::client对象的信息,请参阅以下API文档

返回

安全