Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
Kotlin Sync 驱动程序
/ /

Kerberos (GSSAPI) 身份验证

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

注意

该页面引用的是 GSSAPI 身份验证机制而不是 Kerberos,因为驾驶员使用 GSSAPI RFC-4652 SASL 机制进行身份验证。

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

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

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

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

选择下面的 Connection StringMongoCredential标签页,查看指定此身份验证机制的说明和示例代码:

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

  • authMechanism URL参数设置为 GSSAPI

  • (可选)authSource URL参数设置为 $external

注意

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

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

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

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

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
val settings = MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
val mongoClient = MongoClient.create(settings)

为了获取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 附加属性,请将其作为URL参数包含在连接字符串中,格式如下:<PROPERTY_NAME>:<value>

使用 GSSAPI 和其他属性实例化 MongoClient 的代码类似于以下示例:

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

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

选择SERVICE_NAME_KEYJAVA_SUBJECT_KEY标签页,查看示例代码,以实例化使用 GSSAPI 和所选属性的MongoCredential

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

默认情况下,Kotlin 驱动程序按MongoClient实例缓存 Kerberos 票证。 如果您的部署需要频繁创建和销毁MongoClient实例,则可以将默认 Kerberos 票证缓存行为更改为按进程缓存,以提高性能。

要按进程缓存Kerberos票证,必须使用 MongoCredential身份验证机制,因为连接字符串身份验证机制不支持JAVA_SUBJECT_PROVIDER 机制属性。 要查看说明,请选择 MongoCredential标签页。

要按进程缓存Kerberos票证,必须指定JAVA_SUBJECT_PROVIDER 机制属性并在 实例中提供 KerberosSubjectProvider。MongoCredential以下代码将Kotlin驾驶员配置为按进程缓存Kerberos票证:

/* 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,
KerberosSubjectProvider(myLoginContext)
)

注意

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

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

要学习;了解有关使用Kotlin Sync驾驶员创建 MongoClient对象的详情,请参阅 Create a MongoClient指南。

要进一步学习;了解使用Kotlin Sync驾驶员对应用程序进行身份验证的类和方法,请参阅以下API文档:

后退

LDAP (Plain)

在此页面上