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

企业身份验证机制

在此页面上

  • Overview
  • LDAP 身份验证 (PLAIN)
  • 例子
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • 自定义回调
  • 更多信息
  • API 文档

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

Rust 驱动程序支持使用 LDAP (PLAIN)企业身份验证机制向轻量级目录访问协议 (LDAP) 服务器进行身份验证。

注意

GSSAPI/Kerberos 身份验证

驱动程序不支持 GSSAPI/Kerberos 身份验证机制,但您可以使用其他方法进行身份验证。 要了解有关这些方法的更多信息,请参阅Kerberos MongoDB Server手册中的 身份验证 。

提示

另请参阅:

要使用MongoDB Community Edition中提供的机制对MongoDB进行身份验证,请参阅有关身份验证机制的指南。

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

要选择特定的身份验证机制,请在连接字符串的选项或 Credential结构中指定该机制、您的档案和其他必要信息。

您可以使用目录服务器用户名和密码向轻量级目录访问协议 (LDAP) 服务器进行身份验证。

身份验证机制的名称是PLAIN 而不是LDAP ,因为该机制使用 RFC-4616 中定义的 PLAIN 简单身份验证和安全层 (SASL)。

警告

此身份验证机制以明文形式将密码发送到服务器。 仅在对连接启用 TLS 后使用此机制,以提高安全性并减少应用程序中的漏洞。

要了解更多信息,请参阅 MongoDB Server手册中的 TLS/SSL(传输加密) 。

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

  • username:您的 LDAP 用户名

  • password:您的 LDAP 密码

let plain_cred = Credential::builder()
.username("<username>".to_string())
.password("<password>".to_string())
.mechanism(AuthMechanism::Plain)
.source("$external".to_string())
.build();
client_options.credential = Some(plain_cred);
let client = Client::with_options(client_options)?;

注意

身份验证数据库

由于您的档案存储在 MongoDB 外部,因此您必须使用$external数据库进行身份验证。 The source field of the Credential struct defaults to $external, so you can omit this field.

或者,您可以通过将authMechanism连接字符串选项的值设置为PLAIN来使用连接字符串 URI 进行身份验证。 此示例演示如何使用以下占位符在连接字符串 URI 中指定PLAIN身份验证机制:

  • username:您的 LDAP 用户名

  • password:您的 LDAP 密码

  • hostname:你的 MongoDB Server 的网络地址

let uri = "mongodb://<username>:<password>@<hostname>/?authSource=$external&authMechanism=PLAIN";

重要

MONGODB-OIDC 身份验证机制要求在 Linux 平台上运行 MongoDB Server v 7.0或更高版本。

Rust驾驶员支持对工作负载身份进行 OpenID Connect (OIDC)身份验证。工作负载身份是分配给软件工作负载(例如应用程序、服务、脚本或容器)的身份,用于验证和访问权限其他服务和资源。

以下部分介绍如何使用 MONGODB-OIDC 身份验证机制对各种平台进行身份验证。

要学习;了解有关 MONGODB-OIDC身份验证机制的更多信息,请参阅服务器手册中的 OpenID Connect 身份验证和MongoDB Server参数。

如果应用程序在Azure VM 上运行,或以其他方式使用Azure实例元数据服务 (IMDS),则可以使用Rust驱动程序的内置Azure支持对MongoDB进行身份验证。

您可以通过将 Credential 结构的 mechanism字段设置为 AuthMechanism::MongoDbOidc 来为Azure IMDS 配置 OIDC。此示例使用以下占位符指定身份验证机制:

  • username:如果使用的是 Azure 托管标识,请将其设置为托管标识的客户端 ID。 如果使用服务主体代表企业应用程序,请将其设置为服务主体的应用程序 ID。

  • mechanism_properties:将 ENVIRONMENT属性设置为 azure,并将 TOKEN_RESOURCE 设置为MongoDB 部署上配置的受众参数的值。

以下代码示例展示了如何在创建Client时设立这些选项:

let credential = Credential::builder()
.username("<username>".to_owned())
.mechanism(AuthMechanism::MongoDbOidc)
.mechanism_properties(
doc! { "ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>" }
)
.build();
client_options.credential = Some(credential);
let client = Client::with_options(client_options)?;
let res = client
.database("test")
.collection::<Document>("test")
.find_one(doc! {})
.await?;

如果您的应用程序在 Google Compute Engine 虚拟机上运行,或以其他方式使用GCP实例元数据服务,则可以使用Rust驱动程序的内置GCP支持对MongoDB进行身份验证。

您可以通过将 Credential 结构的 mechanism字段设置为 AuthMechanism::MongoDbOidc 来为GCP IMDS 配置 OIDC。然后,通过在 mechanism_properties字段中设置以下值来指定身份验证机制:

  • ENVIRONMENT:将此属性设置为 gcp

  • TOKEN_RESOURCE:将此属性设置为MongoDB 部署上配置的受众参数值。

以下代码示例展示了如何在创建Client时设立这些选项:

let credential = Credential::builder()
.mechanism(AuthMechanism::MongoDbOidc)
.mechanism_properties(
doc! { "ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>" }
)
.build();
client_options.credential = Some(credential);
let client = Client::with_options(client_options)?;
let res = client
.database("test")
.collection::<Document>("test")
.find_one(doc! {})
.await?;

Rust驾驶员不为所有平台提供内置支持,包括 AWS Elastic Kubernetes Service (EKS)。要使用 OIDC 对不受支持的平台进行身份验证,您必须定义自定义回调函数。

以下代码是针对 EKS集群的自定义回调的示例实施。首先,设立Credential 结构的 oidc_callback字段设置为 oidc::Callback::machine。然后,从 AWS_WEB_IDENTITY_TOKEN_FILE 环境变量中设立的路径读取访问权限令牌。最后,设立IdpServerResponse 结构的 access_token字段的值。 (可选)设立expiresrefresh_token 字段的值。

let credential = Credential::builder()
.mechanism(AuthMechanism::MongoDbOidc)
.oidc_callback(oidc::Callback::machine(move |_| {
async move {
let token_file_path = std::env::var("AWS_WEB_IDENTITY_TOKEN_FILE").map_err(mongodb::error::Error::custom)?;
let access_token = tokio::fs::read_to_string(token_file_path).await?;
Ok(IdpServerResponse::builder().access_token(access_token).build())
}
.boxed()
}))
.build()
.into();
client_options.credential = Some(credential);
let client = Client::with_options(client_options)?;
let res = client
.database("test")
.collection::<Document>("test")
.find_one(doc! {})
.await?;

当员工身份身份验证进程涉及人机交互时,您必须通过将 Credential 结构的 oidc_callback字段设置为 oidc::Callback::human 而不是 oidc::Callback::machine 来配置客户端。 Rust驾驶员在以下进程中使用回调:

  1. 驾驶员检索所提供的用户名的身份提供程序信息 (IDPInfo)。

  2. 该回调与 IDP 协商以获取 access_token 以及任何潜在的 refresh_token 和超时值(如果已配置)。该回调返回一个 Result<IdpServerInfo>

以下示例定义了一个自定义回调来处理员工身份。要根据您的使用案例自定义此示例,请将 替换为您自己的自定义流程。有关详细信息,请参阅<human flow> OIDC 授权代码流程。

let callback = Callback::human(move |context| {
async move {
"<human flow>";
todo!("human flow")
}
.boxed()
});
let credential = Credential::builder()
.mechanism(AuthMechanism::MongoDbOidc)
.oidc_callback(callback)
.build();
client_options.credential = Some(credential);
let client = Client::with_options(client_options)?;
let res = client
.database("test")
.collection::<Document>("test")
.find_one(doc! {})
.await?;

要了解有关本指南中概念的更多信息,请参阅以下文档:

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

后退

身份验证