身份验证机制
Overview
本指南介绍了可在C驾驶员中用于对MongoDB用户进行身份验证的机制。
SCRAM-SHA-256
SCRAM-SHA-256 ,由 RFC7677 定义 ,是运行 MongoDB v 的 MongoDB 部署上的默认身份验证机制。40或更高版本。
要使用SCRAM-SHA-256 进行身份验证,设立以下连接选项:
username
:要进行身份验证的用户名。 在将其包含在连接 URI 中之前,对该值进行百分比编码。password
:用于身份验证的密码。 在将其包含在连接 URI 中之前,对该值进行百分比编码。authSource
:要进行身份验证的MongoDB 数据库。 默认情况下, C驾驶员根据连接 URI 中的数据库(如果包含数据库)进行身份验证。 如果不指定身份验证数据库,则会根据admin
数据库进行身份验证。authMechanism
:设置为SCRAM-SHA-256
。
您可以使用连接字符串中的参数来设立这些选项,如以下代码示例所示:
const char *uri = "mongodb://<percent-encoded username>:<percent-encoded password>@<hostname>:<port>/?authMechanism=SCRAM-SHA-256&authSource=<authentication database>"; mongoc_client_t *client = mongoc_client_new(uri);
SCRAM-SHA-1
SCRAM-SHA-1 ,由 RFC5802 定义 ,是运行 MongoDB v 的 MongoDB 部署上的默认身份验证机制。 。36
要使用此机制进行身份验证,请设置以下连接选项:
username
:要进行身份验证的用户名。 在将其包含在连接 URI 中之前,对该值进行百分比编码。password
:用于身份验证的密码。 在将其包含在连接 URI 中之前,对该值进行百分比编码。authSource
:要进行身份验证的MongoDB 数据库。 默认下, C驾驶员根据admin
数据库进行身份验证。authMechanism
:设置为"SCRAM-SHA-1"
。
您可以使用连接字符串中的参数来设立这些选项,如以下代码示例所示:
const char *uri = "mongodb://<percent-encoded username>:<percent-encoded password>@<hostname>:<port>/?authMechanism=SCRAM-SHA-1&authSource=<authentication database>"; mongoc_client_t *client = mongoc_client_new(uri);
MONGODB-X509
如果编译支持TLS 的C驾驶员,则C驾驶员可以向MongoDB提供 X.509客户端证书,以在 TLS 握手期间证明其身份。 MONGODB-X509身份验证机制使用此证书对客户端进行身份验证。
要使用此机制进行身份验证,请执行以下步骤:
创建
mongoc_ssl_opt_t
结构。 在此结构中,将pem_file
字段设立为包含客户端证书和私钥的.pem
文件的文件路径。在连接 URI 中,将
authMechanism
连接选项设立为"MONGODB-X509"
。
以下代码示例展示了如何创建使用 MONGODB-X509 机制进行身份验证的MongoDB客户端:
mongoc_client_t *client; mongoc_ssl_opt_t ssl_opts = {0}; ssl_opts.pem_file = "mycert.pem"; const char *uri = "mongodb://<percent-encoded username>@<hostname>:<port>/?authMechanism=MONGODB-X509"; mongoc_client_t *client = mongoc_client_new(uri); mongoc_client_set_ssl_opts(client, &ssl_opts);
MONGODB-AWS
重要
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凭证:
传递给连接 URI 的命名参数
环境变量
Amazon Web Services EKS AssumeRoleWithWebIdentity请求
ECS容器元数据
EC 2实例元数据
以下部分介绍如何使用C驾驶员从这些来源检索凭证,并使用它们对应用程序进行身份验证。
连接 URI
首先, C驾驶员会检查您是否将Amazon Web Services凭证作为连接 URI 的一部分传递给 mongoc_client_t
构造函数。 要在连接 URI 中传递凭证,设立以下连接选项:
username
:要进行身份验证的Amazon Web Services IAM访问权限密钥ID 。password
: Amazon Web Services IAM 秘密访问权限密钥。authMechanism
:设置为"MONGODB-AWS"
。
您可以在连接 URI 中设立这些选项,如以下示例所示:
const char *uri = "mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?authMechanism=MONGODB-AWS"); mongoc_client_t *client = mongoc_client_new(uri);
您还可以通过将Amazon Web Services会话令牌传递给 authMechanismProperties
参数来包含该令牌:
const char *uri = "mongodb://<AWS IAM access key ID>:<AWS IAM secret access key>@<hostname>:<port>/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<token>"); mongoc_client_t *client = mongoc_client_new(uri);
环境变量
如果连接 URI 中未包含用户名和密码, 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"
,如以下示例所示:
const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS"); mongoc_client_t *client = mongoc_client_new(uri);
ECS Metadata
如果您的应用程序在弹性容器服务 (ECS)容器中运行,则C驾驶员可以自动从 ECS 端点检索临时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"
,如以下示例所示:
const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS"); mongoc_client_t *client = mongoc_client_new(uri);
EC 2实例元数据
C驾驶员可以自动从Amazon Elastic Cloud Compute (EC2)实例检索临时Amazon Web Services凭证。 要使用 EC2实例中的临时凭证,请将连接 URI 中的 authMechanism
参数设立为 "MONGODB-AWS"
,如以下示例所示:
const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS"); mongoc_client_t *client = mongoc_client_new(uri);
注意
如果您通过上述Amazon Web Services身份验证方法设立了任何环境变量,则C驾驶员会先尝试使用这些方法来检索凭证,然后再尝试从 EC2实例中检索这些档案。 要尝试仅从 EC2实例检索凭证,请确保未设立环境变量。
API 文档
要学习;了解有关在C驾驶员中对应用程序进行身份验证的更多信息,请参阅以下API文档: