Overview
通用安全服务API (GSSAPI
)身份验证机制允许您通过指定Kerberos主体名称来对Kerberos服务进行身份验证。
注意
该页面引用的是 GSSAPI
身份验证机制而不是 Kerberos
,因为驾驶员使用 GSSAPI RFC-4652 SASL 机制进行身份验证。
指定Kerberos身份验证
本节中的示例展示了如何指定 GSSAPI
身份验证机制并使用以下占位符值:
<Kerberos principal>
:您的URL编码主体名称。<hostname>
:您的MongoDB 部署的网络解决,可由您的客户端访问。<port>
: MongoDB 部署的端口号。 如果省略此参数,驾驶员将使用默认端口号 (27017
)。
选择下面的 Connection String 或 MongoCredential标签页,查看指定此身份验证机制的说明和示例代码:
要在连接字符串中指定 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票证
为了获取Kerberos票证,GSSAPI Java库要求您指定域和密钥分发中心 (KDC) 系统属性。
以下代码显示了这些属性的示例值:
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
additionalProperties
您可能需要指定以下一个或多个附加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_KEY或JAVA_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) )
更多信息
要学习;了解有关向MongoDB进行身份验证的更多信息,请参阅MongoDB Server手册中的身份验证。
要学习;了解有关使用Kotlin Sync驾驶员创建 MongoClient
对象的详情,请参阅 Create a MongoClient指南。
API 文档
要进一步学习;了解使用Kotlin Sync驾驶员对应用程序进行身份验证的类和方法,请参阅以下API文档: