对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

企业身份验证机制

MongoDB Enterprise Edition 包含MongoDB Community Edition中不提供的身份验证机制。 在本指南中,您可以学习;了解如何使用这些身份验证机制对MongoDB进行身份验证。 要学习;了解MongoDB中提供的其他身份验证机制,请参阅身份验证机制指南。

您可以使用以下任一方法在连接到MongoDB时指定凭证身份验证机制和档案:

  • 连接字符串

  • MongoCredential 工厂方法

连接字符串(也称为连接 uri)指定如何连接到 MongoDB 集群并对其进行身份验证。

要使用连接string进行身份验证,请将您的设置包含在连接string中,然后将其传递给 MongoClients.create() 方法以实例化您的 MongoClient。 选择以下部分中的 Connection String标签页,查看使用连接string进行身份验证的语法。

您还可以使用MongoCredential类来指定身份验证详细信息。 MongoCredential类包含静态工厂方法,用于构造包含身份验证机制和凭证的实例。 使用MongoCredential助手类时,请使用MongoClientSettings.Builder类配置连接设置。 选择以下部分中的MongoCredential标签页,查看使用MongoCredential进行身份验证的语法。

重要

Java Reactive Streams 驱动程序不支持 UnixServerAddress 对象或域套接字连接。要使用域套接字进行连接,请使用 Java Sync Driver。否则,使用 ServerAddress 对象从 Java Reactive Streams 驱动程序进行连接。

通用安全服务API (GSSAPI)身份验证机制允许您使用主体名称对Kerberos服务进行身份验证。

以下部分包含使用以下占位符的代码示例:

  • username:URL 编码的主体名称,例如 "username%40REALM.ME"

  • hostname:客户端可以访问的 MongoDB 部署的网络地址

  • port:MongoDB 部署的端口号

选择Connection StringMongoCredential标签页以查看相应的语法。

以下示例使用连接string对 GSSAPI 进行身份验证:

MongoClient mongoClient = MongoClients
.create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");

要使用MongoCredential类指定 GSSAPI身份验证机制,请调用createGSSAPICredential()方法,如以下示例所示:

MongoCredential credential = MongoCredential.createGSSAPICredential("<username>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

要获取Kerberos票证,GSSAPI Java库要求您指定域和密钥分发中心 (KDC) 系统属性。您可以按以下示例所示设立这些设置:

java.security.krb5.realm=MYREALM.ME
java.security.krb5.kdc=mykdc.myrealm.me

您可能需要指定以下一个或多个附加MongoCredential机制属性,具体取决于您的Kerberos设置:

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

重要

您只能通过MongoCredential类指定以下 GSSAPI 属性:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

选择MongoCredential标签页,学习;了解如何指定这些属性。

要指定 GSSAPI 其他属性,请将该属性作为 参数包含在连接string URL中,格式如下:<PROPERTY_NAME>:<value>

以下示例对 GSSAPI 进行身份验证并指定其他属性:

MongoClient mongoClient = MongoClients
.create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");

要指定 GSSAPI 其他属性,请在MongoCredential实例上调用withMechanismProperty()方法,并将属性名称和值作为参数传递。 使用MongoCredential类中定义的属性名称常量:

选择SERVICE_NAME_KEYJAVA_SUBJECT_KEY标签页,查看如何指定相应的属性:

MongoCredential credential = MongoCredential
.createGSSAPICredential("<username>");
credential = credential
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>);
loginContext.login();
Subject subject = loginContext.getSubject();
MongoCredential credential = MongoCredential
.createGSSAPICredential("<username>");
credential = credential
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);

默认下, Java Reactive Streams驱动程序按 MongoClient实例缓存Kerberos票证。如果您的部署经常创建和销毁 MongoClient 实例,则可以将默认Kerberos工单缓存行为更改为按进程缓存,以提高性能。

要按进程缓存Kerberos票证,必须使用 MongoCredential身份验证机制,因为连接string身份验证机制不支持JAVA_SUBJECT_PROVIDER 机制属性。 选择MongoCredential标签页,学习;了解如何按进程缓存Kerberos票证。

要按进程缓存Kerberos票证,请指定JAVA_SUBJECT_PROVIDER 机制属性并在 实例中提供 KerberosSubjectProvider,如以下示例所示:MongoCredential

/* All MongoClient instances sharing this instance of KerberosSubjectProvider
will share a Kerberos ticket cache */
String myLoginContext = "myContext";
MongoCredential credential = MongoCredential
.createGSSAPICredential(<username>);
/* Login context defaults to "com.sun.security.jgss.krb5.initiate"
if unspecified in KerberosSubjectProvider */
credential = credential
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY,
new KerberosSubjectProvider(myLoginContext));

注意

在 Windows 上,Oracle 的 JRE 在实施 GSSAPI 时使用 LSA 而不是 SSPI,这限制了与 Windows Active Directory 的互操作性以及单点登录的实施。有关详细信息,请参阅以下资源:

您可以使用目录服务器用户名和密码向轻量级目录访问协议 (LDAP) 服务器进行身份验证。

提示

该身份验证机制名为 PLAIN 而不是 LDAP,因为它使用 RFC-4616 中定义的 PLAIN 简单身份验证和安全层 (SASL) 进行身份验证。

以下部分包含使用以下占位符的代码示例:

  • ldap_username:您的 LDAP 用户名

  • ldap_password:LDAP 用户的密码

  • hostname:客户端可以访问的 MongoDB 部署的网络地址

  • port:MongoDB 部署的端口号

选择Connection StringMongoCredential标签页以查看相应的语法。

MongoClient mongoClient = MongoClients
.create("<ldap_username>:<ldap_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");

要使用MongoCredential类指定LDAP (PLAIN)身份验证机制,请调用createPlainCredential()方法,如以下示例所示:

MongoCredential credential = MongoCredential
.createPlainCredential(<ldap_username>, "$external", <ldap_password>);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());