Overview
汎用セキュリティ サービスAPI (GSSAPI)認証メカニズム、ユーザーはユーザーのプリンシパル名を使用して Kerberos サービスで認証できます。
注意
メソッドは、Kerberos ではなく GSSAPI認証メカニズムを参照します。これは、ドライバーが GSSAPI RFC-4652 SASL メカニズムを使用して認証するためです。
コード プレースホルダー
このページのコード例では、次のプレースホルダーを使用します。
Kerberos principal- URL エンコードされたプリンシパル名(例: "username%40REALM.ME"hostname- クライアントからアクセス可能な MongoDB サーバーのネットワーク アドレスport- MongoDB サーバーのポート番号
GSSAPI による認証
接続文字列を使用して 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_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
重要
次の GSSAPI プロパティは、MongoCredential を使用することでのみ指定できます。
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_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 を使用する MongoCredential と SERVICE_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) )