Docs 菜单
Docs 主页
/ / /
C++ 驱动程序
/

身份验证机制

在此页面上

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

本指南介绍了可在C++驾驶员中用于对用户进行身份验证的机制。

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

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

  • db_username:要进行身份验证的数据库用户名。

  • db_password:要进行身份验证的数据库密码。

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

  • authMechanism:设置为"SCRAM-SHA-256"

您可以在创建 mongocxx::client对象时在连接string中设立这些选项,如以下示例所示:

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

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

  • db_username:要进行身份验证的用户名。

  • db_password:用于身份验证的密码。

  • authSource:要进行身份验证的MongoDB 数据库。 默认, C++驾驶员根据admin数据库进行身份验证。

  • authMechanism:设置为"SCRAM-SHA-1"

您可以在创建 mongocxx::client对象时在连接string中设立这些选项,如以下示例所示:

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对象时在连接string中设立这些选项,如以下示例所示:

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 v 4.4或更高版本。

MONGODB-AWS身份验证机制使用Amazon Web Services IAM( Amazon Web Services身份和访问管理)或Amazon Web Services Lambda档案对应用程序进行凭证验证。 要使用此机制进行身份验证,请先在$external数据库上创建具有关联Amazon资源名称 (ARN) 的用户,然后在 URI 中指定MONGODB-AWS authMechanism。

当您使用 MONGODB-AWS 机制时, C++驾驶员会尝试按列出的顺序从以下源检索您的Amazon Web Services凭证:

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

  2. 环境变量

  3. Amazon Web Services EKS AssumeRoleWithWebIdentity请求

  4. ECS容器元数据

  5. EC 2实例元数据

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

首先, C++驾驶员会检查您是否将Amazon Web Services凭证作为连接 URI 的一部分传递给 MongoClient 构造函数。 要在连接 URI 中传递凭证,请设立以下连接选项:

  • username:要进行身份验证的Amazon Web Services IAM访问权限密钥ID 。

  • password: Amazon Web Services IAM 秘密访问权限密钥。

  • authMechanism:设置为"MONGODB-AWS"

您可以在创建 mongocxx::client对象时在连接string中设立这些选项,如以下示例所示:

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

您还可以通过将Amazon Web Services会话令牌传递给 authMechanismProperties 参数来包含该令牌:

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++驾驶员会尝试从以下环境变量中检索Amazon Web Services凭证:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN (可选)

要使用这些环境变量对应用程序进行身份验证,请先将它们设置为身份验证所需的Amazon Web Services 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 令牌交换应用程序的临时Amazon Web Services凭证。

要使用 AssumeRoleWithWebIdentity请求返回的临时Amazon Web Services IAM凭证进行身份验证,请确保您的环境中存在Amazon Web Services配置文件,并且配置了 AWS_WEB_IDENTITY_TOKEN_FILEAWS_ROLE_ARN 环境变量。 要学习;了解如何创建和配置Amazon Web Services 配置文件,请参阅 配置 在Amazon Web Services 文档中。

AssumeRoleWithWebIdentity请求配置环境后,将连接 URI 中的authMechanism参数设立为"MONGODB-AWS" ,如以下示例所示:

auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS");
auto client = mongocxx::client(uri);

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

如果您的应用程序在弹性容器服务 (ECS)容器运行,则C++驾驶员可以自动从凭证端点检索临时Amazon Web Services档案。 为此,在名为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 Web Services AmazonElastic Cloud Compute (EC)实例检索临时2 凭证。要使用 EC 2实例中的临时凭证,请将连接 URI 中的authMechanism参数设立为"MONGODB-AWS" ,如以下示例所示:

auto uri = mongocxx::uri("mongodb://<hostname>:<port>/?"
"authMechanism=MONGODB-AWS");
auto client = mongocxx::client(uri);

注意

如果您通过前面的Amazon Web Services身份验证方法设立了任何环境变量,则C++驾驶员会尝试使用这些方法检索凭证,然后再尝试从 EC2实例中检索档案。 要尝试仅从 EC 2实例检索凭证,请确保未设立环境变量。

要学习;了解有关在C++驾驶员中创建mongocxx::client对象的详情,请参阅以下API文档:

后退

保护您的数据