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

Kerberos (GSSAPI) 身份验证

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

注意

术语

该页面在提及身份验证机制时使用 GSSAPI,在提及底层协议或服务时使用 Kerberos。驱动程序通过使用在 Kerberos 协议之上构建的 GSSAPI RFC-4752 SASL 机制进行身份验证。

本节中的示例展示了如何指定 GSSAPI身份验证机制并使用以下占位符值:

  • <Kerberos principal>:您的URL编码主体名称。

  • <hostname>:您的MongoDB 部署的网络解决,可由您的客户端访问。

  • <port>: MongoDB 部署的端口号。如果省略此参数,驱动程序将使用默认端口号 (27017)。

选择 Connection StringMongoCredential标签页以查看说明和代码示例:

要在连接字符串中指定 GSSAPI身份验证机制,请执行以下操作:

  • authMechanism URL参数设置为 GSSAPI

  • (可选)将 authSourceURL参数设置为$external

注意

如果指定GSSAPI 机制,则不能将authSource 分配给$external 以外的任何值。

以下示例在连接字符串中指定身份验证机制:

val mongoClient = MongoClient(
"mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI"
)

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

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
val mongoClient = MongoClient(MongoClientSettings
.builder()
.applyToClusterSettings(builder =>
builder.hosts(List(new ServerAddress("<hostname>", <port>)).asJava))
.credential(credential)
.build())

要获取Kerberos票证,GSSAPI Java库要求您指定域和密钥分发中心 (KDC) 系统属性。

以下代码显示了这些属性的示例值:

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

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

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

选择下面的 Connection StringMongoCredential 标签页,以获取指定这些属性的说明和示例代码:

要指定 GSSAPI 其他属性,请将该属性作为 URL 参数以 <PROPERTY_NAME>:<value> 格式包含在连接字符串中。

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

val mongoClient = MongoClient(
"mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService"
)

重要

您只能使用 MongoCredential 来指定以下 GSSAPI 属性:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

选择MongoCredential标签页,查看如何指定它们。

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

以下示例对 GSSAPI 进行身份验证并指定 SERVICE_NAME_KEY 常量:

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")

JAVA_SUBJECT_KEY 属性需要 javax.security.auth.Subject 对象。要检索 Subject,必须首先通过使用 LoginContext 通过 Java 身份验证和授权服务 (JAAS) 进行身份验证。以下示例展示了此配置:

val loginContext = new LoginContext("<LoginModule implementation from JAAS config>")
loginContext.login()
val subject: Subject = loginContext.getSubject()
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject)

默认下, Scala驾驶员按创建 Kerberos 票证的 MongoClient实例缓存Kerberos票证。如果您的部署经常创建和销毁 MongoClient 实例,则可以通过将默认Kerberos票证缓存行为更改为 按进程缓存来提高性能。

重要

您必须使用 MongoCredential 类来更改默认缓存行为,因为连接字符串身份验证机制不支持 JAVA_SUBJECT_PROVIDER 机制属性。

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

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

注意

在Windows上,Oracle 的 JRE 在实施GSSAPI 时使用 LSA 而不是 SSPI。此行为限制了与Windows Active Directory 的互操作性以及单点登录的实施。要学习;了解详情,请参阅以下资源:

要学习;了解有关向MongoDB进行身份验证的更多信息,请参阅MongoDB Server手册中的身份验证。

MongoClient要学习;了解有关使用Scala驾驶员创建 对象的更多信息,请参阅创建 MongoClient指南。

要学习;了解有关使用Scala驾驶员对应用程序进行身份验证的类和方法的更多信息,请参阅以下API文档: