身份验证机制
概述
在本指南中,您可以学习如何使用MongoDB社区版中可用的每种认证机制。MongoDB使用认证机制来确认身份并建立信任,以确保在连接之前驱动程序和服务器中的安全性。
要使用以下认证方式GSSAPI/Kerberos
或 LDAP
,请参阅企业认证机制基础页面。要了解更多关于连接到您的MongoDB集群的信息,请参阅连接指南。
支持的机制
Go 驱动程序支持以下认证机制
The Go Driver establishes a connection with an authentication mechanism through a Client type. The Client
type specifies the mechanism and credentials to use as connection options in a Credential type . To configure these options, pass a Credential
type to the SetAuth() method of the ClientOptions type.
以下部分通过使用MongoDB社区版支持的五种机制来演示此过程。
示例约定
每种认证机制都包含以下占位符
db_username
- 您的MongoDB数据库用户名db_password
- 您的MongoDB数据库用户密码hostname
- 您的MongoDB服务器网络地址,可由您的客户端访问port
- 您的MongoDB服务器端口号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)和加盐挑战-响应(SCRAM)认证机制的信息,请参阅服务器手册中的SCRAM部分。
SCRAM-SHA-256
重要
SCRAM-SHA-256
是从MongoDB 4.0开始默认的认证方法。
SCRAM-SHA-256
是一种加盐挑战-响应(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
重要
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-CR
是一种挑战响应认证机制,它使用您的用户名和密码来认证您的用户。
重要
从 MongoDB 3.6 开始,此认证机制已被弃用,并在 MongoDB 4.0 中不再受支持。
MONGODB-AWS
重要
MONGODB-AWS 认证机制仅在 MongoDB 版本 4.4 及更高版本中可用。
MONGODB-AWS
认证机制使用您的 Amazon Web Services 身份和访问管理 (AWS IAM) 凭证来验证您的用户。
要连接到启用 MONGODB-AWS
认证的 MongoDB 实例,请指定 MONGODB-AWS
认证机制。
驱动程序将按照以下顺序检查您的凭据来源
连接字符串
环境变量
Web 身份令牌文件
在
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
环境变量中指定的 AWS ECS 端点AWS EC2 端点。有关更多信息,请参阅 IAM Roles for Tasks。
重要
驱动程序仅从找到的第一个来源获取凭据。例如,如果您在连接字符串中指定了您的 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
使用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)