Docs 菜单
Docs 主页
/ / /
Rust 驱动程序
/

身份验证机制

在此页面上

  • Overview
  • 基于 SCRAM 的机制
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-AWS 机制
  • MONGODB-X 509机制
  • 更多信息
  • API 文档

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

提示

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

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

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

  • 基于 SCRAM 的机制

  • MONGODB-AWS 机制

  • MONGODB-X 509机制

要选择特定的身份验证机制,您可以在连接字符串的选项或 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(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(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(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 = "3.2.0"
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 ServicesAmazon Web Services EC2 端点。有关更多信息,请参阅Amazon Amazon Web ServicesWeb 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(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 凭证。 有关此过程的更多信息,请 参阅 AssumeRoleAmazon 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 。 驾驶员从环境变量中读取您的Amazon Web Services 凭证档案。 以下代码演示如何定义指定了Amazon Web Services身份验证的 Credential 结构体并连接到MongoDB :

let uri = "<connection string>";
let mut client_options = ClientOptions::parse(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 。 驾驶员从令牌文件中读取您的Amazon Web Services IAM凭证。 以下代码演示如何定义指定了Amazon Web Services身份验证的 Credential 结构体并连接到MongoDB :

let uri = "<connection string>";
let mut client_options = ClientOptions::parse(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(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 文档:

后退

Stable API