身份验证机制
Overview
在本指南中,可以了解如何使用 MongoDB Community Edition 中提供的每种身份验证机制。MongoDB 使用身份验证机制来确认身份并建立信任,确保连接之前驱动程序和服务器的安全。
要使用 GSSAPI/Kerberos
或LDAP
进行身份验证,请参阅企业身份验证机制基础知识页面。 要学习;了解有关建立与MongoDB 集群连接的更多信息,请参阅连接指南。
支持的机制
Go 驱动程序支持以下身份验证机制:
Go驱动程序通过客户端 类型与身份验证机制建立连接。Client
类型指定了用作 凭证类型 中的连接选项的机制和凭证。要配置这些选项,请将Credential
类型传递给 ClientOptions 类型的 SetAuth() 方法。
以下部分将通过 MongoDB Community Edition 支持的五种机制来演示这一过程。
示例规则
每种身份验证机制都包含以下占位符:
db_username
- 您的 MongoDB 数据库用户名db_password
- 您的 MongoDB 数据库用户的密码hostname
- 您的 MongoDB 服务器网络地址(可由您的客户访问)port
- 您的 MongoDB Server 端口号authenticationDb
- 包含用户身份验证数据的 MongoDB 数据库。如果省略此选项,驱动程序将使用默认值admin
。
默认
默认机制使用以下身份验证机制之一, 具体取决于服务器支持的 MongoDB 版本:
机制 | 版本 |
---|---|
| MongoDB 4.0 及更高版本 |
| MongoDB 3.0、3.2、3.4 和 3.6 |
| 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(clientOpts)
如要进一步了解有关 MongoDB 支持的质询-响应 (CR) 和 salted 质询-响应身份验证机制 (SCRAM) ,请参阅 server 手册的 SCRAM 部分。
SCRAM-SHA-256
重要
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(clientOpts)
SCRAM-SHA-1
重要
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(clientOpts)
MONGODB-CR
MONGODB-CR
是一种挑战-响应身份验证机制,它使用您的用户名和密码
来验证您的用户。
重要
从 MongoDB 3.6 开始,这种身份验证机制已被弃用, 从 MongoDB 4.0 开始不再支持。
MONGODB-AWS
重要
MONGODB-AWS 身份验证机制仅适用于 MongoDB 4.4 及更高版本。
MONGODB-AWS
身份验证机制使用 Amazon Web Services Identity and Access Management (AWS IAM) 档案对用户进行身份验证。
要连接到启用了 MONGODB-AWS
身份验证的 MongoDB 实例,请指定 MONGODB-AWS
身份验证机制。
驾驶员会按所列顺序在以下来源中检查您的凭证:
连接字符串。
环境变量。
Web 身份令牌文件。
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
环境变量中指定的Amazon Web Services ECS 端点。AWS EC2 端点。要学习;了解更多信息,请参阅 AWS 文档中的任务的 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(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
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)