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

身份验证机制

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

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

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

  • SCRAM-SHA-256

  • SCRAM-SHA-1

  • 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

SCRAM-SHA-256 是一种 Salted 质询-响应身份验证机制(SCRAM ),它使用通过 SHA-256算法加密的数据库用户名和密码来对用户进行身份验证。这是默认的身份验证机制。

要指定此默认身份验证机制,请省略 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(clientOpts)

您还可以通过为 AuthMechanism 选项分配值 "SCRAM-SHA-256" 来显式指定 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(clientOpts)

要学习;了解有关MongoDB支持的质询-响应身份验证机制 (SCRAM ) 的更多信息,请参阅服务器手册的SCRAM部分。

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(clientOpts)

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

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

驾驶员会按所列顺序在以下来源中检查您的凭证:

  1. 连接字符串。

  2. 环境变量。

  3. Web 身份令牌文件。

  4. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 环境变量中指定的Amazon Web Services ECS 端点。

  5. Amazon Web Services EC2 端点。 要学习;了解更多信息,请参阅Amazon Web Services文档中的任务的 IAM 角色。

重要

驾驶员仅从找到档案的第一个来源获取凭证。示例,如果在连接字符串中指定Amazon Web Services凭证,驾驶员将忽略您在环境变量中指定的任何凭证。

提示

以下示例使用 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(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(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(options.Client().SetAuth(envVariablesCredential))
if err != nil {
panic(err)
}
_ = envVariablesClient

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

  • AWS_WEB_IDENTITY_TOKEN_FILE:设置为包含 OIDC 令牌的文件的绝对路径。

  • AWS_ROLE_ARN:设置为用于连接集群的IAM角色。示例:arn:aws:iam::111122223333:role/my-role

以下Shell命令设置这些环境变量:

export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file that contains OIDC token>
export AWS_ROLE_ARN=<IAM role name>

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

envVariablesCredential := options.Credential{
AuthMechanism: "MONGODB-AWS",
}
envVariablesClient, err := mongo.Connect(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)

后退

上下文

在此页面上