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

身份验证机制

在此页面上

  • Overview
  • 支持的机制
  • 示例规则
  • 默认
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-CR
  • MONGODB-AWS
  • X.509

在本指南中,可以了解如何使用 MongoDB Community Edition 中提供的每种身份验证机制。MongoDB 使用身份验证机制来确认身份并建立信任,确保连接之前驱动程序和服务器的安全。

要使用 GSSAPI/KerberosLDAP进行身份验证,请参阅企业身份验证机制基础知识页面。 要学习;了解有关建立与MongoDB 集群连接的更多信息,请参阅连接指南。

Go 驱动程序支持以下身份验证机制:

  • SCRAM-SHA-256

  • SCRAM-SHA-1

  • MONGODB-CR

  • MONGODB-AWS

  • x.509

Go驱动程序通过客户端 类型与身份验证机制建立连接。Client 类型指定了用作 凭证类型 中的连接选项的机制和凭证。要配置这些选项,请将Credential 类型传递给 ClientOptions 类型的 SetAuth() 方法。

以下部分将通过 MongoDB Community Edition 支持的五种机制来演示这一过程。

每种身份验证机制都包含以下占位符:

  • db_username - 您的 MongoDB 数据库用户名

  • db_password - 您的 MongoDB 数据库用户的密码

  • hostname - 您的 MongoDB 服务器网络地址(可由您的客户访问)

  • port - 您的 MongoDB Server 端口号

  • authenticationDb - 包含用户身份验证数据的 MongoDB 数据库。如果省略此选项,驱动程序将使用默认值 admin

默认机制使用以下身份验证机制之一, 具体取决于服务器支持的 MongoDB 版本:

机制
版本
SCRAM-SHA-256
MongoDB 4.0 及更高版本
SCRAM-SHA-1
MongoDB 3.0、3.2、3.4 和 3.6
MONGODB-CR
MongoDB 2.6 及更早版本

如需指定默认身份验证机制,请省略 AuthMechanism 选项:

credential := options.Credential{
AuthSource: "<authenticationDb>",
Username: "<db_username>",
Password: "<db_password>",
}
clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>").
SetAuth(credential)
client, err := mongo.Connect(context.TODO(), clientOpts)

如要进一步了解有关 MongoDB 支持的质询-响应 (CR) 和 salted 质询-响应身份验证机制 (SCRAM) ,请参阅 server 手册的 SCRAM 部分。

重要

SCRAM-SHA-256 是从 MongoDB 4.0 开始使用的 MongoDB 默认身份验证方法。

SCRAM-SHA-256 是一种Salted 挑战响应身份验证机制 (SCRAM),即使用通过 SHA-256 算法加密的数据库用户名和密码来验证用户身份。

要指定 SCRAM-SHA-256 身份验证机制,请为 AuthMechanism 选项指定值 "SCRAM-SHA-256"

credential := options.Credential{
AuthMechanism: "SCRAM-SHA-256",
AuthSource: "<authenticationDb>",
Username: "<db_username>",
Password: "<db_password>",
}
clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>").
SetAuth(credential)
client, err := mongo.Connect(context.TODO(), clientOpts)

重要

SCRAM-SHA-1 是 MongoDB 版本 3.0、3.2、3.4 和 3.6 的默认身份验证方法。

SCRAM-SHA-1 是一种盐化质询-响应机制 (SCRAM),它使用您的用户名和密码,并使用 SHA-1 算法加密,来对您的用户进行身份验证。

要指定 SCRAM-SHA-1 身份验证机制,请为 AuthMechanism 选项指定值 "SCRAM-SHA-1"

credential := options.Credential{
AuthMechanism: "SCRAM-SHA-1",
AuthSource: "<authenticationDb>",
Username: "<db_username>",
Password: "<db_password>",
}
clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>").
SetAuth(credential)
client, err := mongo.Connect(context.TODO(), clientOpts)

MONGODB-CR 是一种挑战-响应身份验证机制,它使用您的用户名和密码 来验证您的用户。

重要

从 MongoDB 3.6 开始,这种身份验证机制已被弃用, 从 MongoDB 4.0 开始不再支持。

重要

MONGODB-AWS 身份验证机制仅适用于 MongoDB 4.4 及更高版本。

MONGODB-AWS 身份验证机制使用 Amazon Web Services Identity and Access Management (AWS IAM) 档案对用户进行身份验证。

要连接到启用了 MONGODB-AWS 身份验证的 MongoDB 实例,请指定 MONGODB-AWS 身份验证机制。

该驱动程序会按列出的顺序在以下来源中检查是否存在档案:

  1. 连接字符串

  2. 环境变量

  3. 网络身份令牌文件

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

  5. AWS EC2 端点。有关更多信息,请参阅针对任务的 IAM 角色

重要

驱动程序仅从找到档案的第一个来源获取档案。 例如,如果在连接字符串中指定 AWS 档案, 驱动程序将忽略您在环境变量中指定的任何档案。

提示

以下示例使用 SetAuth() 方法设置相应的档案。您也可以使用 ApplyURI() 方法指定这些档案。如果使用 ApplyURI() 方法,则必须对用户名和密码进行 URL 编码,以确保正确解析。

如需使用 AWS IAM 档案连接到 MongoDB 实例,请执行以下步骤:

  • AuthMechanism 选项指定值 MONGODB-AWS

  • Username 选项指定 accessKeyID 的值

  • Password 选项指定 secretAccessKey 的值

var accessKeyID, secretAccessKey string
awsCredential := options.Credential{
AuthMechanism: "MONGODB-AWS",
AuthSource: "<authenticationDb>",
Username: "<accessKeyID>",
Password: "<secretAccessKey>",
}
awsIAMClient, err := mongo.Connect(
context.TODO(),
options.Client().SetAuth(awsCredential))
if err != nil {
panic(err)
}
_ = awsIAMClient

如果必须指定 AWS 会话令牌,请使用假设角色请求返回的临时凭证。

如需使用临时档案,请将 sessionToken 的值指定给 AuthMechanismProperties 选项:

var accessKeyID, secretAccessKey, sessionToken string
assumeRoleCredential := options.Credential{
AuthMechanism: "MONGODB-AWS",
AuthSource: "<authenticationDb>",
Username: "<accessKeyID>",
Password: "<secretAccessKey>",
AuthMechanismProperties: map[string]string{
"AWS_SESSION_TOKEN": "<sessionToken>",
},
}
assumeRoleClient, err := mongo.Connect(context.TODO(),
options.Client().SetAuth(assumeRoleCredential))

要使用存储在环境变量中的 AWS 凭证对 MongoDB 实例进行身份验证,请使用 shell 按如下方式设置变量:

export AWS_ACCESS_KEY_ID=<awsKeyId>
export AWS_SECRET_ACCESS_KEY=<awsSecretKey>
export AWS_SESSION_TOKEN=<awsSessionToken>

注意

如果您不需要用于进行身份验证的角色的 AWS 会话令牌,请省略包含 AWS_SESSION_TOKEN 的行。

设置上述环境变量后,指定 MONGODB-AWS 身份验证机制,如以下示例所示:

envVariablesCredential := options.Credential{
AuthMechanism: "MONGODB-AWS",
}
envVariablesClient, err := mongo.Connect(
context.TODO(),
options.Client().SetAuth(envVariablesCredential))
if err != nil {
panic(err)
}
_ = envVariablesClient

您可以使用从 Web 身份提供程序获得的 OpenID Connect (OIDC) 令牌对 Amazon Elastic Kubernetes Service (EKS) 或其他服务进行身份验证。要使用 OIDC 令牌,请创建包含令牌的文件,然后使用 shell 在环境变量中设置此文件的绝对路径,如以下示例所示:

export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>

设立上述环境变量后,指定 MONGODB-AWS 身份验证机制,如以下示例所示:

envVariablesCredential := options.Credential{
AuthMechanism: "MONGODB-AWS",
}
envVariablesClient, err := mongo.Connect(
context.TODO(),
options.Client().SetAuth(envVariablesCredential))
if err != nil {
panic(err)
}
_ = envVariablesClient

X.509 身份验证机制使用 TLS 以及 X.509 证书对用户进行身份验证,并由客户端证书的相对标识名 (RDN) 进行标识。当您指定 X.509 身份验证机制时,服务器将使用以下文件的路径对连接进行身份验证:

  • tlsCAFile 其中包含在建立 TLS 连接时要信任的单个或一组证书颁发机构

  • tlsCertificateKeyFile ,它会引用客户端证书文件或客户端私钥文件的路径

如需指定 X.509 身份验证机制,请执行以下操作:

  • 在连接字符串中为 tlsCAFile 指定文件路径

  • 在连接字符串中为 tlsCertificateKeyFile 指定文件路径

  • AuthMechanism 选项指定值 "MONGODB-X509"

caFilePath := "<cafile_path>"
certificateKeyFilePath := "<client_certificate_path>"
uri := "mongodb://<hostname>:<port>/?tlsCAFile=%s&tlsCertificateKeyFile=%s"
uri = fmt.Sprintf(uri, caFilePath, certificateKeyFilePath)
credential := options.Credential{
AuthMechanism: "MONGODB-X509",
}
clientOpts := options.Client().ApplyURI(uri).SetAuth(credential)

后退

上下文