Docs Menu
Docs Home
/ /
/ / /

Kerberos(GSSAPI)認証

汎用セキュリティ サービスAPI (GSSAPI)認証メカニズム、ユーザーはユーザーのプリンシパル名を使用して Kerberos サービスで認証できます。

注意

メソッドは、Kerberos ではなく GSSAPI認証メカニズムを参照します。これは、ドライバーが GSSAPI RFC-4652 SASL メカニズムを使用して認証するためです。

このページのコード例では、次のプレースホルダーを使用します。

  • Kerberos principal - URL エンコードされたプリンシパル名(例: "username%40REALM.ME"

  • hostname - クライアントからアクセス可能な MongoDB サーバーのネットワーク アドレス

  • port - MongoDB サーバーのポート番号

接続文字列を使用して 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(Key Distributor)システム プロパティを指定する必要があります。次の例のサンプル設定を参照してください。

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

Kerberos の設定によっては、次の追加のMongoCredentialメカニズム プロパティを 1 つ以上指定する必要がある場合があります。

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

重要

次の GSSAPI プロパティは、MongoCredential を使用することでのみ指定できます。

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

次の例は、追加のプロパティを指定する方法を示しています。

GSSAPI 追加プロパティの 1 つを指定するには、次の形式を使用して接続string に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 追加プロパティの 1 つを指定するには、 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 メカニズムプロパティを指定し、MongoCredentialインスタンスにKerberosSubjectProviderを指定する必要があります。プロセスごとに Kerberos チケットをキャッシュようにKotlinドライバーを構成するコードは、次のようになります。

/* 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 は、LSA ではなく SSPI を使用します。これは、Windows Active Directory およびシングル サインオンの実装との相互運用性を制限する GSSAPI の実装です。詳しくは、次の記事を参照してください。

戻る

LDAP (PLAIN)

項目一覧