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

身份验证机制

本页内容

  • 概述
  • 基于SCRAM的机制
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-AWS机制
  • MONGODB-X509机制
  • 更多信息
  • API 文档

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

提示

要了解如何通过轻量级目录访问协议(LDAP)服务器进行MongoDB身份验证,请参阅关于企业身份验证机制.

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

本指南描述以下身份验证机制

  • 基于SCRAM的机制

  • MONGODB-AWS机制

  • MONGODB-X509机制

要选择特定的身份验证机制,您可以在连接字符串的选项中指定机制、您的凭据和其他必要信息,或者在凭据结构体中。

在本指南中,示例演示了如何在凭据结构体中配置身份验证。

要了解更多有关身份验证连接字符串选项的信息,请参阅服务器手册中连接字符串URI格式指南的身份验证选项部分。

加盐挑战响应身份验证机制(SCRAM)是指一组使用用户名和密码进行服务器身份验证的机制。

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

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

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

重要

默认认证机制

如果您未指定认证机制,服务器将尝试使用默认认证机制来验证凭据,该机制基于SCRAM,并且根据您连接的服务器版本而有所不同。

SCRAM-SHA-256机制是MongoDB服务器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) 凭证来认证您的用户。

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

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

重要

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

  • 您连接到 MongoDB 服务器版本 4.4 或更高版本。

  • 您使用的是 tokio 异步运行时。

驱动程序仅从第一个找到凭据的位置获取凭据。驱动程序按照以下顺序检查您的凭据:

  1. Credential 结构体或连接字符串。

  2. 环境变量。

  3. Web 身份令牌文件。

  4. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 环境变量中指定的 AWS ECS 终端。

  5. AWS EC2 终端。有关更多信息,请参阅 AWS 文档中的 IAM Roles for Tasks

例如,如果您在连接字符串中指定了您的 AWS 凭证,则驱动程序将使用这些凭据并忽略您可能在环境变量中指定的任何凭据。

从以下选项中选择:凭证结构环境变量Web身份令牌文件选项卡下面提供了代码示例,展示了如何以相应的方式设置您的AWS IAM凭证。

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

  • 访问密钥ID:您的AWS访问密钥ID

  • 秘密访问密钥:您的AWS秘密访问密钥

  • db:与用户关联的认证数据库

如果您使用临时凭证,请创建一个包含您的AWS会话令牌值的文档,然后将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)?;

提示

您可以从安全令牌服务(Security Token Service,STS)的假设角色请求中获取临时AWS IAM凭证。有关此过程的更多信息,请参阅假设角色AWS文档。

要将您的AWS凭证存储在环境变量中,请在您的shell中运行以下命令

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

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

将您的Credential结构中的mechanism选项设置为AuthMechanism::MongoDbAws。驱动程序将从您的环境变量中读取您的AWS IAM凭证。以下代码展示了如何定义一个具有AWS认证指定的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。驱动程序将从令牌文件中读取您的AWS IAM凭证。以下代码展示了如何定义一个具有AWS认证指定的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。以下示例使用以下占位符指定认证机制

  • CA证书路径:您的CA文件文件路径

  • 私钥客户端密钥路径:您的证书密钥文件文件路径

  • db:与用户关联的认证数据库

以下代码展示了如何在连接字符串中引用您的证书,指定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部署中用户的更多信息,请参阅服务器手册中的用户

要了解本指南中提到的方法和类型,请参阅以下 API 文档

返回

稳定API