身份验证机制
概述
在本指南中,您可以了解如何在MongoDB社区版中使用的身份验证机制。当您连接到MongoDB时,您可以使用身份验证机制在驱动程序和服务器之间建立信任。
本指南描述以下身份验证机制
要选择特定的身份验证机制,您可以在连接字符串的选项中指定机制、您的凭据和其他必要信息,或者在凭据
结构体中。
在本指南中,示例演示了如何在凭据
结构体中配置身份验证。
要了解更多有关身份验证连接字符串选项的信息,请参阅服务器手册中连接字符串URI格式指南的身份验证选项部分。
基于SCRAM的机制
加盐挑战响应身份验证机制(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
要指定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) 凭证来认证您的用户。
要使用此认证机制,您必须在项目的 Cargo.toml
文件中将 mongodb
依赖项的 aws-auth
功能标志添加。以下示例显示了您的 mongodb
依赖项功能列表必须包含哪些内容才能启用 MONGODB-AWS
认证机制:
[dependencies.mongodb] version = "3.1.0" features = [ "aws-auth", ... ]
重要
要在 Rust 驱动中使用 MONGODB-AWS
认证机制,您的应用程序必须满足以下要求:
您连接到 MongoDB 服务器版本 4.4 或更高版本。
您使用的是
tokio
异步运行时。
驱动程序仅从第一个找到凭据的位置获取凭据。驱动程序按照以下顺序检查您的凭据:
Credential
结构体或连接字符串。环境变量。
Web 身份令牌文件。
在
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
环境变量中指定的 AWS ECS 终端。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行
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)?;
提示
您可以从安全令牌服务(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机制
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 文档