身份验证机制
Overview
在本指南中,您可以了解如何使用 MongoDB Community Edition中提供的身份验证机制。 连接到 MongoDB 时,可以使用身份验证机制在驱动程序和服务器之间建立信任。
本指南介绍了以下身份验证机制:
要选择特定的身份验证机制,您可以在连接字符串的选项或 Credential
结构中指定机制、凭证和其他必要信息。
本指南中的示例演示了如何在Credential
结构中配置身份验证。
要了解有关用于身份验证的连接string 选项的更多信息,请参阅 stringMongoDB Server手册中连接 URI 格式指南的 身份验证选项 部分。
基于 SCRAM 的机制
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
要指定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
要指定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 机制
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
异步运行时。
驱动程序仅从找到档案的第一个来源获取档案。 驱动程序会按以下顺序从以下来源检查您的档案:
Credential
struct 或 connection string 。环境变量。
Web 身份令牌文件。
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
环境变量中指定的Amazon Web Services ECS 端点。Amazon Web ServicesAmazon Web Services EC2 端点。有关更多信息,请参阅Amazon Amazon Web ServicesWeb Services文档中的任务 的 IAM 角色。
例如,如果您在Amazon Web Services 连接 中指定string 档案,则驱动程序将使用这些档案并忽略您在环境变量中指定的任何档案。
从下面的 Credential Struct 、 Environment Variables和Web Identity Token File标签页中选择代码示例,演示如何以相应的方式设置 Amazon Web Services IAM 档案。
要指定MONGODB-AWS
身份验证机制,请将Credential
结构的mechanism
字段设置为AuthMechanism::MongoDbAws
。 此示例使用以下占位符指定身份验证机制:
access key ID
:您的Amazon Web Services访问密钥IDsecret access key
:您的Amazon Web Services秘密访问权限密钥db
:与用户关联的身份验证数据库
如果使用临时凭证,请创建一个包含Amazon Web Services会话令牌值的文档,然后设立Credential
结构的 mechanism_properties
字段设置为此文档。 如果您使用的不是临时凭证,请省略以下示例中的第9行:
1 let uri = "<connection string>"; 2 let mut client_options = ClientOptions::parse(uri).await?; 3 4 let 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 12 client_options.credential = Some(aws_cred); 13 let 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-X 509机制
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 文档
要进一步了解本指南所提及的方法和类型,请参阅以下 API 文档: