Docs 菜单
Docs 主页
/ /
/ / /

Kerberos (GSSAPI) 身份验证

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

注意

该方法引用 GSSAPI身份验证机制而不是 Kerberos,因为驱动程序使用 GSSAPI RFC-4652 SASL 机制进行身份验证。

本页上的代码示例使用以下占位符:

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

  • hostname - 可供客户端访问的 MongoDB 服务器的网络地址

  • port - MongoDB Server 的端口号

要使用连接字符串指定 GSSAPI身份验证机制,请将 authMechanism URL参数分配给值 GSSAPI,然后,可以选择将 authSource URL参数分配给值 $external

注意

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

用于实例化MongoClient的代码应类似于以下内容:

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

要使用 MongoCredential 类指定 GSSAPI身份验证机制,请使用 createGSSAPICredential() 方法。用于实例化 MongoClient 的代码应类似于以下内容:

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

以下示例显示如何指定其他属性:

要指定某一 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类中定义的属性名称常量:

以下示例化使用 GSSAPI 的 MongoCredentialSERVICE_NAME_KEY

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

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

要按进程缓存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 的互操作性以及单点登录的实施。有关详细信息,请参阅以下文章:

后退

LDAP (Plain)

在此页面上