Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Kotlin Sync ドライバー
/ /

Kerberos(GSSAPI)認証

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

注意

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

このセクションの例では、GSSAPI認証メカニズムを指定し、次のプレースホルダー値を使用する方法を示します。

  • <Kerberos principal>: URLエンコードされたプリンシパル名。

  • <hostname>: MongoDBデプロイのネットワーク アドレスで、クライアントからアクセスできます。

  • <port>: MongoDBデプロイのポート番号。 このパラメーターを省略すると、ドライバーはデフォルトのポート番号(27017)を使用します。

Connection StringMongoCredentialこの認証メカニズムを指定するための手順とサンプルコードについては、以下の [0 タブまたは タブを選択してください。

接続文字列で 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(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

これらを指定する方法については、 MongoCredentialタブを選択してください。

GSSAPI 追加プロパティの 1 つを指定するには、形式: <PROPERTY_NAME>:<value> を使用して接続文字列にそれをURLパラメーターとして含めます。

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クラスで定義されている次のプロパティ名定数を使用します。

[ 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を指定する必要があります。次のコードでは、プロセスごとに 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 は GSSAPI の実装で LSA ではなく SSPI を使用するため、 Windows Active Directory および シングル サインオンの実装との相互運用性が制限されます。詳しくは、次の記事を参照してください。

MongoDBへの認証の詳細については、 MongoDB Serverマニュアルの 認証 を参照してください。

Kotlin Syncドライバーを使用して MongoClientオブジェクトを作成する方法について詳しくは、「MongoClient の作成」ガイドを参照してください。

Kotlin Syncドライバーでアプリケーションを認証するためのクラスとメソッドの詳細については、次のAPIドキュメントを参照してください。

戻る

LDAP (PLAIN)

項目一覧