Overview
MongoDB Enterprise Edition には、 MongoDB Community Edition では使用できない認証メカニズムが含まれています。 このガイドでは、これらの認証メカニズムを使用してMongoDBを認証する方法を学習できます。 MongoDBで利用可能なその他の認証メカニズムの詳細については、「認証メカニズムのガイド」を参照してください。
認証メカニズムを指定する
MongoDBに接続するときに、次のいずれかの方法を使用して認証メカニズムと認証情報を指定できます。
接続文字列
MongoCredentialファクトリー メソッド
接続string (接続 URIとも呼ばれます)は、 MongoDBクラスターへの接続と認証の方法を指定します。
接続文字列 を使用して認証するには、 接続string stringに設定を含め、それを MongoClients.create() メソッドに渡して MongoClient をインスタンス化します。 接続stringを使用して認証するための構文を確認するには、次のセクションで Connection Stringタブを選択します。
また、認証の詳細を指定するために、 MongoCredentialクラスを使用することもできます。 MongoCredentialクラスには、認証メカニズムと認証情報を含む インスタンスを構築する静的ファクトリー メソッドが含まれています。 MongoCredentialヘルパークラスを使用する場合は、接続設定を構成するためにMongoClientSettings.Builderクラスを使用します。 MongoCredentialを使用して認証する構文を確認するには、次のセクションでMongoCredentialタブを選択します。
重要
Java Reactive Streams ドライバーは UnixServerAddress オブジェクトまたは ドメイン ソケット接続をサポートしていません。ドメイン ソケットを使用して接続するには、Java Sync Driver を使用します。それ以外の場合は、ServerAddressオブジェクトを使用してJava Reactive Streams ドライバーから接続します。
メカニズム
Kerberos (GSSAPI)
ジェネリック セキュリティ サービスAPI (GSSAPI)認証メカニズムを使用すると、プリンシパル名を使用して Kerberos サービスで認証できます。
次のセクションには、次のプレースホルダーを使用するコード例が含まれています。
username: URL エンコードされたプリンシパル名(例:"username%40REALM.ME"hostname: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport: MongoDB 配置のポート番号
Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。
次の例では、接続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チケットを取得するには、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
これらのプロパティを指定する方法については、 MongoCredentialタブを選択してください。
GSSAPI 追加プロパティを指定するには、接続stringにプロパティを形式のURLパラメータとして含めます: <PROPERTY_NAME>:<value>。
次の例では、GSSAPI で認証し、追加のプロパティを指定しています。
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
GSSAPI 追加プロパティを指定するには、 MongoCredentialインスタンスでwithMechanismProperty()メソッドを呼び出し、プロパティ名と値をパラメーターとして渡します。 MongoCredentialクラスで定義されているプロパティ名定数を使用します。
対応するプロパティを指定する方法を確認するには、 SERVICE_NAME_KEYタブまたはJAVA_SUBJECT_KEYタブを選択します。
MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");
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 ドライバーはMongoClientインスタンスによって Kerberos チケットをキャッシュします。 配置でMongoClientインスタンスが頻繁に作成され、破棄される場合は、デフォルトの Kerberosチケットキャッシュ動作を プロセスごとにキャッシュすることでパフォーマンスを向上させることができます。
プロセスごとにKerberosチケットをキャッシュするには、 MongoCredential認証メカニズムを使用する必要があります。接続string認証メカニズムでは JAVA_SUBJECT_PROVIDER メカニズムプロパティがサポートされていないためです。 プロセス別に Kerberos チケットをキャッシュする方法については、 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));
LDAP (PLAIN)
ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。
Tip
認証メカニズムは、PLAIN LDAPRFC-4616 で定義されている PLAIN 簡易認証とセキュリティ層(SASL)を使用して認証するため、 ではなく という名前が付けられています。
次のセクションには、次のプレースホルダーを使用するコード例が含まれています。
ldap_username: LDAP ユーザー名ldap_password: LDAP ユーザーのパスワードhostname: クライアントがアクセスできる MongoDB 配置のネットワーク アドレスport: MongoDB 配置のポート番号
Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。
MongoClient mongoClient = MongoClients .create("<ldap_username>:<ldap_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");
MongoCredentialクラスを使用して LDAP(PLAIN)認証メカニズムを指定するには、次の例に示すように、 createPlainCredential()メソッドを呼び出します。
MongoCredential credential = MongoCredential .createPlainCredential(<ldap_username>, "$external", <ldap_password>); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());