Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
C 驱动程序
/

身份验证

本指南介绍了如何使用MongoDB C驱动程序的身份验证选项。 在建立连接之前,确保MongoDB服务器也已正确配置身份验证。 有关详细信息,请参阅 MongoDB安全文档

MongoDB C 驱动程序通过使用 MongoDB 连接 URI 支持多种身份验证机制。

默认,如果提供了用户名和密码作为连接string (以及可选的身份验证数据库)的一部分,则使用它们通过服务器的默认身份验证机制进行连接。

要选择默认以外的特定身份验证机制,请参阅下面支持的机制列表。

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb");

authMechanism 连接string选项当前支持的值为:

MongoDB4.0 引入了对使用SCRAM协议进行身份验证的支持,该协议具有256 RFC7677 中描述的更安全的 SHA- 哈希 。使用这种身份验证机制意味着,在进行身份验证时,实际上永远不会通过网络发送密码,而是通过计算证明客户端密码与服务器已知的密码相同。 在MongoDB 4中。 0 , C驾驶员可以为具有存储的 SCRAM-SHA- 1和SCRAM -SHA- 256档案的用户确定正确的默认凭证身份验证机制:

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb");
/* the correct authMechanism is negotiated between the driver and server. */

或者,可以将SCRAM-SHA- 256显式指定为 authMechanism。

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-256&authSource=mydb");

MongoDB4.0 之前的默认身份验证机制是SCRAM-SHA-1 ( RFC5802 )。使用这种身份验证机制意味着,在进行身份验证时,实际上永远不会通过网络发送密码,而是通过计算证明客户端密码与服务器已知的密码相同。

mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-1&authSource=mydb");

注意

SCRAM-SHA-1 默认根据admin数据库进行身份验证。 如果用户是在另一个数据库中创建的,则需要指定 authSource。

MONGODB-CR authMechanism 已弃用,将不再在 MongoDB 4.0中运行。 相反,不指定 authMechanism,驱动程序将使用与服务器兼容的身份验证机制。

注意

在类 UNIX 环境中, Kerberos支持要求针对cyrus-sasl编译驾驶员。

在Windows上, Kerberos支持要求针对Windows Native SSPI 或cyrus-sasl编译驾驶员。 驾驶员的默认配置将使用Windows Native SSPI。

要修改默认配置,请使用 cmake 选项ENABLE_SASL

GSSAPI (Kerberos)身份验证在MongoDB企业版中可用。 要使用GSSAPI进行身份验证,必须安装支持SASL 的MongoDB C驾驶员。

在类 UNIX 环境中,请先运行kinit命令,然后再使用以下身份验证方法:

$ kinit mongodbuser@EXAMPLE.COM
mongodbuser@EXAMPLE.COM's Password:
$ klistCredentials cache: FILE:/tmp/krb5cc_1000
Principal: mongodbuser@EXAMPLE.COM
Issued Expires Principal
Feb 9 13:48:51 2013 Feb 9 23:48:51 2013 krbtgt/EXAMPLE.COM@EXAMPLE.COM

现在使用 MongoDB URI 进行身份验证。 GSSAPI根据$external虚拟数据库进行身份验证,因此无需在 URI 中指定数据库。 请注意,Kerberos 主体必须进行 URL 编码:

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI");

注意

GSSAPI 根据$external数据库进行身份验证,因此无需指定 authSource数据库。

驱动程序支持以下 GSSAPI 属性:

  • CANONICALIZE_HOST_NAME:当主机报告的主机名与Kerberos数据库中使用的主机名不同时,Cyrus-SASL 可能需要这样做。 默认值为“false”。

  • SERVICE_NAME:使用不同于默认名称“ MongoDB ”的服务名称。

在URL中设置属性:

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI&"
"authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:true");

如果遇到Invalid net address等错误,请检查应用程序是否位于 NAT(网络地址转换)防火墙后面。 如果是这样,请创建使用forwardableaddressless Kerberos票证的票证。 这可以通过将-f -A传递给kinit来完成。

$ kinit -f -A mongodbuser@EXAMPLE.COM

注意

MongoDB C驱动程序必须在编译时支持SASL,才能使用SASL PLAIN身份验证。

MongoDB Enterprise版支持SASL PLAIN身份验证机制,该机制最初用于将身份验证委托给LDAP服务器。 使用SASL PLAIN机制与使用用户名和密码的挑战响应机制非常相似。 此身份验证机制使用$external虚拟数据库来提供LDAP支持:

注意

SASL PLAIN 是一种明文身份验证机制。 使用PLAIN机制时,强烈建议使用带证书验证的 TLS 连接 MongoDB。

mongoc_client_t *client;
client = mongoc_client_new ("mongodb://user:password@example.com/?authMechanism=PLAIN");

PLAIN 根据$external数据库进行身份验证,因此无需指定 authSource数据库。

注意

MongoDB C驱动程序必须在编译时支持TLS,以支持X. 509身份验证。 完成此操作后,使用以下选项启动服务器:

$ mongod --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem

MONGODB-X509机制对从驾驶员在 TLS 协商期间提供的 X. 509证书的标识主题名称派生的用户名进行身份验证。 此身份验证方法需要使用带证书验证的 TLS 连接。

mongoc_client_t *client;
mongoc_ssl_opt_t ssl_opts = { 0 };
ssl_opts.pem_file = "mycert.pem";
ssl_opts.pem_pwd = "mycertpassword";
ssl_opts.ca_file = "myca.pem";
ssl_opts.ca_dir = "trust_dir";
ssl_opts.weak_cert_validation = false;
client = mongoc_client_new ("mongodb://x509_derived_username@localhost/?authMechanism=MONGODB-X509");
mongoc_client_set_ssl_opts (client, &ssl_opts);

MONGODB-X509 根据$external数据库进行身份验证,因此无需指定 authSource数据库。 有关 x 509 _衍生_用户名的更多信息,请参阅MongoDB服务器x。 509教程。

注意

当未提供任何用户名时, MongoDB C驱动程序将尝试确定 x 509派生的用户名,并且从MongoDB 3.4开始,只要根本不需要用户名。

机制使用MONGODB-AWS MongoDBAmazon Web ServicesIdentity and Access Management (IAM) 提供的档案对 服务器进行凭证验证。

要进行身份验证,请在$external数据库上创建具有关联Amazon资源名称 (ARN) 的用户,并在 URI 中指定MONGODB-AWS authMechanism

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost/?authMechanism=MONGODB-AWS");

由于MONGODB-AWS始终根据$external数据库进行身份验证,因此无需指定 authSource数据库。

档案包括access key idsecret access key和可选的session token 。 可以通过以下方式获取它们。

凭证可以作为用户名/密码直接在 URI 中传递。

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS");

这可能包括通过session token 传递的authMechanismProperties

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<token>");

如果凭证未通过 URI 传递,libmongoc 将检查以下环境变量。

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN (optional)

如果凭证未在 URI 中或与环境变量一起传递,libmongoc 将检查是否设置了环境变量AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ,如果已设立,则尝试通过查询链接本地解决从 ECS任务元数据中检索临时凭证。

如果凭证未在 URI 中传递或随环境变量一起传递,且未设立环境变量AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ,则 libmongoc 将尝试通过查询链接本地地址从 EC 2机器元数据中检索临时凭证。

提示

后退

Tutorial

在此页面上