在本指南中,您可以了解如何使用 MongoDB Community Edition 提供的身份验证机制对 MongoDB 进行身份验证。身份验证机制是驱动程序和服务器在连接之前确认客户端身份以确保安全的过程。
MongoCredential
包括以下 import 语句:
import com.mongodb.MongoCredential; import com.mongodb.ConnectionString; import com.mongodb.reactivestreams.client.MongoClients; import com.mongodb.reactivestreams.client.MongoClient;
身份验证档案表示为 MongoCredential
类的实例。 MongoCredential
类包含每种受支持的身份验证机制的静态工厂方法。
默认身份验证机制
要创建使用默认身份验证机制SCRAM-SHA-256
进行身份验证的档案,请使用 createCredential()
静态工厂方法创建档案:
String user; // the user name String source; // the source where the user is defined char[] password; // the password as a character array // ... MongoCredential credential = MongoCredential.createCredential(user, source, password); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("host1", 27017)))) .credential(credential) .build());
重要
Java Reactive Streams驾驶员不支持 UnixServerAddress 对象或域套接字连接。要使用域套接字进行连接,请使用Java Sync驾驶员。否则,使用 ServerAddress对象从Java Reactive Streams驾驶员进行连接。
或者,您可以使用连接string ,而无需显式指定身份验证机制:
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1");
对于挑战和响应机制,我们建议使用默认身份验证机制。这简化了升级并确保使用正确的哈希算法。
基于 SCRAM 的机制
Salted 挑战-响应身份验证机制SCRAM
() 基于 IETF RFC5802 标准,该标准定义了实施使用密码对用户进行身份验证的挑战-响应机制的最佳实践。 MongoDB支持使用SCRAM-SHA-1
SHA-1
哈希函数的 和使用SCRAM-
SHA-256
SHA-256
哈希函数的 。
SCRAM-SHA-256
要显式创建类型为SCRAM-SHA-256
的档案,请使用createScramSha256Credential()
方法:
String user; // the user name String source; // the source where the user is defined char[] password; // the password as a character array // ... MongoCredential credential = MongoCredential.createScramSha256Credential(user, source, password); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("host1", 27017)))) .credential(credential) .build());
或者,您可以使用显式指定 authMechanism=SCRAM-SHA-256
的连接string :
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-256");
SCRAM-SHA-1
要显式创建类型为SCRAM-SHA-1
的档案,请使用createScramSha1Credential()
方法:
String user; // the user name String source; // the source where the user is defined char[] password; // the password as a character array // ... MongoCredential credential = MongoCredential.createScramSha1Credential(user, source, password); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("host1", 27017)))) .credential(credential) .build());
或者,您可以使用显式指定 authMechanism=SCRAM-SHA-1
的连接string :
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-1");
MONGODB-CR
重要
MongoDB不再支持已弃用的MongoDB挑战-响应 (MONGODB-CR
)身份验证机制。如果您的部署将用户凭证存储在 MONGODB-CR
模式中,则必须升级到基于 SCRAM
的机制。
要显式创建MONGODB-CR
类型的档案,请使用createMongCRCredential()
静态工厂方法:
String user; // the user name String database; // the name of the database in which the user is defined char[] password; // the password as a character array // ... MongoCredential credential = MongoCredential.createMongoCRCredential(user, database, password); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("host1", 27017)))) .credential(credential) .build());
或者,您可以使用显式指定 authMechanism=MONGODB-CR
的连接string :
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=MONGODB-CR");
注意
将身份验证模式从MONGODB-CR
升级到SCRAM
后, MONGODB-CR
档案将无法进行身份验证。
x.509
通过X.509
机制,MongoDB 使用 SSL 协商期间提供的 X. 509证书对名称源自 X. 509证书标识名的用户进行身份验证。
X. 509身份验证要求使用带证书验证的 SSL 连接。 要创建此类档案,请使用createMongoX509Credential()
静态工厂方法:
String user; // The X.509 certificate derived user name, e.g. "CN=user,OU=OrgUnit,O=myOrg,..." // ... MongoCredential credential = MongoCredential.createMongoX509Credential(user); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("host1", 27017)))) .credential(credential) .build());
或者,您可以使用显式指定 authMechanism=MONGODB-X509
的连接string :
MongoClient mongoClient = MongoClients.create("mongodb://subjectName@host1/?authMechanism=MONGODB-X509&ssl=true");
请参阅 手册中的“ 使用 x.509 MongoDB Server证书对客户端进行身份验证 ”教程,了解有关从证书确定主题名称的更多信息。