Overview
総合セキュリティ サービス API (GSSAPI) 認証メカニズムを使用すると、プリンシパル名を指定して Kerberos サービスで認証できます。
注意
用語
ページでは、認証メカニズムを参照する場合は GSSAPIを使用し、基礎となるプロトコルまたはサービスを参照する場合は Kerberosを使用します。ドライバーは、Kerberos プロトコルの上に構築された GSSAPI RFC-4752 SASL メカニズムを使用して認証します。
Kerberos 認証の指定
このセクションの例では、GSSAPI認証メカニズムを指定し、次のプレースホルダー値を使用する方法を示します。
<Kerberos principal>: URLエンコードされた プリンシパル名。<hostname>: MongoDBデプロイのネットワーク アドレスで、クライアントからアクセスできます。<port>: MongoDBデプロイのポート番号。 このパラメーターを省略すると、ドライバーはデフォルトのポート番号(27017)を使用します。
手順とコード例を表示するには、Connection String タブまたは MongoCredential タブを選択します。
接続文字列で GSSAPI 認証メカニズムを指定するには、次のアクションを実行します。
authMechanismURLパラメータをGSSAPIに設定します。(任意)
authSourceURL パラメータを$externalに設定します。
注意
GSSAPIメカニズムを指定する場合、 authSourceを$external以外の値に割り当てることはできません。
次の例では、接続文字列で認証メカニズムを指定します。
val mongoClient = MongoClient( "mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI" )
MongoCredentialクラスを使用して GSSAPI認証メカニズムを指定するには、次の例に示すように createGSSAPICredential() メソッドを使用します。
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") val mongoClient = MongoClient(MongoClientSettings .builder() .applyToClusterSettings(builder => builder.hosts(List(new ServerAddress("<hostname>", <port>)).asJava)) .credential(credential) .build())
Kerberos チケットの取得
Kerberosチケットを取得するには、GSSAPI Javaライブラリで、邦土と KDC(Key Distribution Center)システムプロパティを指定する必要があります。
次のコードは、これらのプロパティのサンプル値を示しています。
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
additionalProperties
Kerberos の設定によっては、次の追加の認証メカニズム プロパティを 1 つ以上指定する必要がある場合があります。
SERVICE_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
これらのプロパティを指定する手順とサンプル コードについては、以下の [Connection String ] タブまたは [MongoCredential ] タブを選択してください。
GSSAPI 追加プロパティを指定するには、接続文字列にプロパティを <PROPERTY_NAME>:<value> 形式の URL パラメータとして含めます。
次の例では、GSSAPI に対して認証し、SERVICE_NAME プロパティを指定します。
val mongoClient = MongoClient( "mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService" )
重要
次の GSSAPI プロパティは、MongoCredential を使用することでのみ指定できます。
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
これらを指定する方法については、 MongoCredentialタブを選択してください。
GSSAPI 追加プロパティを指定するには、MongoCredential インスタンスで withMechanismProperty() メソッドを呼び出し、プロパティ名と値をパラメーターとして渡します。MongoCredential クラスで定義されている次のプロパティ名定数を使用します。
次の例では、GSSAPI で認証し、SERVICE_NAME_KEY 定数を指定しています。
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")
JAVA_SUBJECT_KEY プロパティには javax.security.auth.Subject オブジェクトが必要です。Subject を検索するには、まず Java 認証および承認サービス (JAAS) を介して LoginContext を使用して認証する必要があります。次の例は、この構成を示しています。
val loginContext = new LoginContext("<LoginModule implementation from JAAS config>") loginContext.login() val subject: Subject = loginContext.getSubject() val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject)
チケット キャッシュ
デフォルトでは、Scala ドライバーは Kerberos チケットを作成した MongoClient インスタンスによってキャッシュします。配置で MongoClient インスタンスが頻繁に作成されて破棄される場合は、デフォルトの Kerberos チケットキャッシュの動作をプロセスによってキャッシュするように変更することで、パフォーマンスを向上させることができます。
重要
接続文字列認証メカニズムは JAVA_SUBJECT_PROVIDER メカニズムプロパティをサポートしないため、デフォルトのキャッシング動作を変更するには MongoCredential クラスを使用する必要があります。
プロセスによって Kerberos チケットをキャッシュには、次の例に示すように、JAVA_SUBJECT_PROVIDER メカニズムプロパティを指定し、MongoCredentialインスタンスに KerberosSubjectProvider を指定します。
/* 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, new KerberosSubjectProvider(myLoginContext) )
詳細情報
MongoDBへの認証の詳細については、 MongoDB Serverマニュアルの 認証 を参照してください。
Scalaドライバーを使用して MongoClient オブジェクトを作成する方法について詳しくは、「MongoClient の作成」ガイドを参照してください。
API ドキュメント
Scala ドライバーを使用してアプリケーションを認証するためのクラスとメソッドの詳細については、次の API ドキュメントを参照してください。