身份验证机制
概述
本指南描述了您可以在C驱动程序中使用的机制,用于将用户认证到MongoDB。
SCRAM-SHA-256
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
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);
MONGODB-X509
如果使用TLS支持编译C驱动程序,C驱动程序可以在TLS握手期间向MongoDB提供一个X.509客户端证书以证明其身份。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 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凭据作为连接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元数据
如果您的应用程序运行在弹性容器服务(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);
EC2实例元数据
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实例检索凭证,请确保未设置环境变量。
API 文档
要了解更多关于在C驱动程序中验证您的应用程序的信息,请参阅以下API文档