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

身份验证机制

在本页中

  • 概述
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-X509
  • MONGODB-AWS
  • 连接URI
  • 环境变量
  • ECS元数据
  • EC2实例元数据
  • API文档

本指南描述了您可以在C驱动程序中使用的机制,用于将用户认证到MongoDB。

重要

百分比编码

您必须进行百分比编码 在将它们包含在MongoDB URI之前对用户名和密码进行百分比编码。

SCRAM-SHA-256,由RFC 7677定义,是MongoDB v4.0或更高版本部署上的默认身份验证机制。

要使用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,由RFC 5802定义,是MongoDB v3.6部署上的默认身份验证机制。

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

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

如果使用TLS支持编译C驱动程序,C驱动程序可以在TLS握手期间向MongoDB提供一个X.509客户端证书以证明其身份。MONGODB-X509身份验证机制使用此证书来验证客户端。

要使用此机制进行身份验证,请执行以下步骤

  1. 创建一个mongoc_ssl_opt_t结构。在此结构上,将pem_file字段设置为包含您的客户端证书和私钥的.pem文件的文件路径。

  2. 在您的连接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 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凭据作为连接URI的一部分传递给mongoc_client_t构造函数。要将凭据传递到连接URI中,设置以下连接选项

  • username:用于验证的AWS IAM访问密钥ID。

  • password:AWS 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);

您还可以通过传递到authMechanismProperties参数中来包含AWS会话令牌

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驱动将尝试从以下环境变量中检索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",如下例所示

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS");
mongoc_client_t *client = mongoc_client_new(uri);

如果您的应用程序运行在弹性容器服务(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",如下例所示

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS");
mongoc_client_t *client = mongoc_client_new(uri);

C驱动程序可以自动从Amazon弹性云计算(EC2)实例检索临时AWS凭证。要使用EC2实例内的临时凭证,将连接URI中的authMechanism参数设置为"MONGODB-AWS",如下例所示

const char *uri = "mongodb://<hostname>:<port>/?authMechanism=MONGODB-AWS");
mongoc_client_t *client = mongoc_client_new(uri);

注意

如果您设置了前面提到的任何AWS认证方法的环境变量,C驱动程序将尝试使用这些方法检索凭证,然后再尝试从EC2实例中检索凭证。要仅尝试从EC2实例检索凭证,请确保未设置环境变量。

要了解更多关于在C驱动程序中验证您的应用程序的信息,请参阅以下API文档

返回

保护您的数据