Overview
汎用セキュリティ サービスAPI (GSSAPI)認証メカニズムを使用すると、Kerberos プリンシパル名を指定して Kerberos サービスで認証できます。
注意
用語
GSSAPIページでは、認証メカニズムを参照する場合はKerberos を使用し、基礎のプロトコルまたはサービスを参照する場合は を使用します。ドライバーは、 Kerberosプロトコル上に構築された GSSAPI RFC-4752 SASL メカニズムを使用して認証します。
Kerberos 認証の指定
次のセクションには、次のプレースホルダー値を使用するコード例が含まれています。
<username>: URLでエンコードされたプリンシパル名(例: )"username%40REALM.ME"<hostname>:クライアントからアクセス可能なMongoDBデプロイのネットワーク アドレス<port>: MongoDBデプロイのポート番号
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
次の例では、接続stringを使用して GSSAPI を認証します。
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
MongoCredentialクラスを使用して GSSAPI認証メカニズムを指定するには、次の例に示すように、 createGSSAPICredential()メソッドを呼び出します。
MongoCredential credential = MongoCredential.createGSSAPICredential("<username>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kerberos チケットの取得
Kerberosチケットを取得するには、GSSAPI Javaライブラリは、 邦土と KDC(Key Distrigger) JVMシステム プロパティを指定する必要があります。次の例は、これらのプロパティを設定する方法を示しています。
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
追加プロパティを設定する
Kerberos の設定によっては、次の追加の認証メカニズムプロパティを 1 つ以上指定する必要がある場合があります。
SERVICE_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
これらのプロパティを指定するための手順とサンプルコードについては、以下の [Connection String] タブまたは [MongoCredential]タブを選択してください。
GSSAPI 追加プロパティを指定するには、接続文字列のプロパティを<PROPERTY_NAME>:<value>形式のURLパラメータとして含めます。
次の例では、GSSAPI で認証し、SERVICE_NAMEプロパティを指定しています。
MongoClient mongoClient = MongoClients .create("<username>@<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 定数を指定しています。
MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");
JAVA_SUBJECT_KEYプロパティには javax.security.auth.Subjectオブジェクトが必要です。 Subject を取得するには、まず LoginContext を使用してJava Authentication and Authorization Service(Java Authentication and Authorization Service、Java Authentication and Authorization Service)で認証する必要があります。次の例に、この構成を示します。
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>); loginContext.login(); Subject subject = loginContext.getSubject(); MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
チケットキャッシュの設定
デフォルトでは 、 Java Reactive Streams ドライバーは、Kerberos チケットを作成した MongoClientインスタンスによって Kerberos チケットをキャッシュします。配置で 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 */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); /* Login context defaults to "com.sun.security.jgss.krb5.initiate" if unspecified in KerberosSubjectProvider */ credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY, new KerberosSubjectProvider(myLoginContext));
注意
Windowsでは、Oracle の JRE は、GSSAPI の実装で、SSI(Securitysupport Provider Interface)ではなく、 Local Security Authority(LSA) を使用します。これにより、 Windows Active Directory およびシングル サインオンの実装との相互運用性が制限されます。詳しくは、次のリソースを参照してください。
詳細情報
MongoDBへの認証の詳細については、 MongoDB Serverマニュアルの 認証 を参照してください。
Java Reactive Streams ドライバーを使用して オブジェクトを作成する方法について詳しくは、MongoClient MongoDBへの接続ガイドをご覧ください。
API ドキュメント
このガイドで言及されているクラスとメソッドについて詳しくは、次の API ドキュメントを参照してください。