对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

身份验证机制

在本指南中,您可以了解如何使用 MongoDB Community Edition中提供的身份验证机制。 连接到 MongoDB 时,可以使用身份验证机制在驱动程序和服务器之间建立信任。

提示

要了解如何使用轻量级目录访问协议 (LDAP) 服务器对 MongoDB 进行身份验证,请参阅企业身份验证机制指南。

要了解有关连接到 MongoDB 部署的更多信息,请参阅连接指南。

本指南介绍了以下身份验证机制:

要选择特定的身份验证机制,您可以在连接string的选项或 Credential 结构中指定该机制、凭证和其他必要信息。

本指南中的示例演示了如何在Credential结构中配置身份验证。

要了解有关用于身份验证的连接string 选项的更多信息,请参阅 stringMongoDB Server手册中连接 URI 格式指南的 身份验证选项 部分。

Salted 质询响应身份验证机制 (SCRAM) 是指一组使用用户名和密码向服务器进行身份验证的身份验证机制。

MongoDB 支持以下基于 SCRAM 的身份验证机制:

  • SCRAM-SHA- 256 :一种身份验证机制,使用数据库用户名和密码,并通过SHA-256算法加密

  • SCRAM-SHA- 1 :一种身份验证机制,使用数据库用户名和密码,并通过SHA-1算法加密

重要

默认身份验证机制

如果不指定身份验证机制,服务器将尝试使用默认身份验证机制来验证档案,这是一种基于 SCRAM 的机制,根据要连接的服务器版本而有所不同。

SCRAM-SHA-256 是 MongoDB Server 4.0 及更高版本的默认身份验证机制。

要使用默认身份验证机制,请在实例化Credential结构时仅省略mechanism字段。 此示例使用以下占位符:

  • db_username:您的数据库用户名

  • db_password:您的数据库密码

  • db:与用户关联的身份验证数据库

let uri = "<connection string>";
let mut client_options = ClientOptions::parse_async(uri).await?;
let default_cred = Credential::builder()
.username("<db_username>".to_string())
.password("<db_password>".to_string())
.source("<db>".to_string())
.build();
client_options.credential = Some(default_cred);
let client = Client::with_options(client_options)?;

要指定SCRAM-SHA-256身份验证机制,请将Credential结构的mechanism字段设置为AuthMechanism::ScramSha256 。 此示例使用以下占位符指定身份验证机制:

  • db_username:您的数据库用户名

  • db_password:您的数据库密码

  • db:与用户关联的身份验证数据库

let uri = "<connection string>";
let mut client_options = ClientOptions::parse_async(uri).await?;
let scram_sha_256_cred = Credential::builder()
.username("<db_username>".to_string())
.password("<db_password>".to_string())
.mechanism(AuthMechanism::ScramSha256)
.source("<db>".to_string())
.build();
client_options.credential = Some(scram_sha_256_cred);
let client = Client::with_options(client_options)?;

要指定SCRAM-SHA-1身份验证机制,请将Credential结构的mechanism字段设置为AuthMechanism::ScramSha1 。 此示例使用以下占位符指定身份验证机制:

  • db_username:您的数据库用户名

  • db_password:您的数据库密码

  • db:与用户关联的身份验证数据库

let uri = "<connection string>";
let mut client_options = ClientOptions::parse_async(uri).await?;
let scram_sha_1_cred = Credential::builder()
.username("<db_username>".to_string())
.password("<db_password>".to_string())
.mechanism(AuthMechanism::ScramSha1)
.source("<db>".to_string())
.build();
client_options.credential = Some(scram_sha_1_cred);
let client = Client::with_options(client_options)?;

MONGODB-AWS 身份验证机制使用 Amazon Web Services Identity and Access Management (AWS IAM) 档案对用户进行身份验证。

要使用该身份验证机制,您必须将 aws-auth 功能标志添加到项目的 Cargo.toml 文件中的 mongodb 依赖项。下面的示例展示了您的 mongodb 依赖项功能列表必须包含哪些内容才能启用 MONGODB-AWS 身份验证机制:

[dependencies.mongodb]
version = "2.8.2"
features = [ "aws-auth", ... ]

重要

要在 Rust 驱动程序中使用MONGODB-AWS身份验证机制,您的应用程序必须满足以下要求:

  • 您已连接到 MongoDB Server 4.4或更高版本。

  • 您正在使用tokio异步运行时。

驱动程序仅从找到档案的第一个来源获取档案。 驱动程序会按以下顺序从以下来源检查您的档案:

  1. Credential struct 或 connection string 。

  2. 环境变量。

  3. Web 身份令牌文件。

  4. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 环境变量中指定的Amazon Web Services ECS 端点。

  5. Amazon Web Services EC2 端点。 有关更多信息,请参阅Amazon Web Services文档中的任务的 IAM 角色。

例如,如果您在Amazon Web Services 连接 中指定string 档案,则驱动程序将使用这些档案并忽略您在环境变量中指定的任何档案。

从下面的 Credential StructEnvironment VariablesWeb Identity Token File 标签页中选择代码示例,这些代码示例演示如何以相应的方式设置Amazon Web Services IAM 档案。

要指定MONGODB-AWS身份验证机制,请将Credential结构的mechanism字段设置为AuthMechanism::MongoDbAws 。 此示例使用以下占位符指定身份验证机制:

  • access key ID:您的Amazon Web Services访问密钥ID

  • secret access key:您的Amazon Web Services秘密访问权限密钥

  • db:与用户关联的身份验证数据库

如果使用临时凭证,请创建一个包含Amazon Web Services会话令牌值的文档,然后设立Credential 结构的 mechanism_properties字段设置为此文档。 如果您使用的不是临时凭证,请省略以下示例中的第9行:

1let uri = "<connection string>";
2let mut client_options = ClientOptions::parse_async(uri).await?;
3
4let aws_cred = Credential::builder()
5 .username("<access key ID>".to_string())
6 .password("<secret access key>".to_string())
7 .source("<db>".to_string())
8 .mechanism(AuthMechanism::MongoDbAws)
9 .mechanism_properties(doc!("AWS_SESSION_TOKEN": "<session token>"))
10 .build();
11
12client_options.credential = Some(aws_cred);
13let client = Client::with_options(client_options)?;

提示

您可以从安全令牌服务 (STS) 担任角色请求中获取临时Amazon Web Services IAM凭证。 有关此进程的了解详情,请参阅 AssumeRole Amazon Web Services文档。

要将Amazon Web Services凭证存储在环境变量中,请在shell中运行以下命令:

export AWS_ACCESS_KEY_ID=<access key ID>
export AWS_SECRET_ACCESS_KEY=<secret access key>
export AWS_SESSION_TOKEN=<session token>

如果您使用的不是Amazon Web Services会话令牌,请省略设置 AWS_SESSION_TOKEN 环境变量的行。

Credential 结构中的 mechanism 选项设置为 AuthMechanism::MongoDbAws。驱动程序从环境变量中读取 AWS IAM凭证。以下代码展示了如何定义指定了 AWS 身份验证的 Credential 结构体并连接到 MongoDB:

let uri = "<connection string>";
let mut client_options = ClientOptions::parse_async(uri).await?;
let aws_cred = Credential::builder().mechanism(AuthMechanism::MongoDbAws).build();
client_options.credential = Some(aws_cred);
let client = Client::with_options(client_options)?;

您可以使用从 Web 身份提供商获取的 OpenID Connect (OIDC) 令牌对Amazon Elastic Kubernetes Service (EKS) 或其他服务进行身份验证。 要使用 OIDC 令牌,请创建一个包含令牌的文件,然后定义一个环境变量,其值为令牌文件的绝对路径,如以下shell命令所示:

export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to OIDC token file>

Credential 结构中的 mechanism 选项设置为 AuthMechanism::MongoDbAws。驱动程序从令牌文件中读取您的 AWS IAM凭证。以下代码展示了如何定义指定了 AWS 身份验证的 Credential 结构体并连接到 MongoDB:

let uri = "<connection string>";
let mut client_options = ClientOptions::parse_async(uri).await?;
let aws_cred = Credential::builder().mechanism(AuthMechanism::MongoDbAws).build();
client_options.credential = Some(aws_cred);
let client = Client::with_options(client_options)?;

MONGODB-X509身份验证机制将传输级安全性 (TLS) 与 X. 509证书结合使用,对用户进行身份验证,该用户由客户端证书的相对标识名 (RDN) 进行标识。

指定此身份验证机制时,服务器将通过读取以下文件对连接进行身份验证:

  • 证书颁发机构 (CA) 文件,其中包含建立 TLS 连接时要信任的一个或多个证书颁发机构

  • 证书密钥文件,引用客户端证书私钥

要指定MONGODB-X509身份验证机制,请将Credential结构的mechanism字段设置为AuthMechanism::MongoDbX509 。 此示例使用以下占位符指定身份验证机制:

  • path to CA certificate:CA 文件的文件路径

  • path to private client key:证书密钥文件的文件路径

  • db:与用户关联的身份验证数据库

以下代码展示了如何在连接string中引用证书、指定 MONGODB-X509 身份验证机制以及连接到MongoDB :

let uri = format!(
"mongodb://<hostname>:<port>/?tlsCAFile={tlsCAFile}&tlsCertificateKeyFile={tlsCertificateKeyFile}",
tlsCAFile = "<path to CA certificate>",
tlsCertificateKeyFile = "<path to private client key>"
);
let mut client_options = ClientOptions::parse_async(uri).await?;
let x509_cred = Credential::builder().mechanism(AuthMechanism::MongoDbAws).build();
client_options.credential = Some(x509_cred);
let client = Client::with_options(client_options)?;

要了解有关向MongoDB进行身份验证的更多信息,请参阅MongoDB Server手册中的身份验证。

要了解有关管理MongoDB部署用户的更多信息,请参阅MongoDB Server手册中的用户。

要进一步了解本指南所提及的方法和类型,请参阅以下 API 文档: