エンタープライズ認証メカニズム
Overview
このガイドでは、MongoDB Enterprise Edition でのみ使用可能な各認証メカニズムを使用して MongoDB で認証する方法を学習できます。
MongoDB Enterprise Edition の最新バージョンでは、次のメカニズムを使用できます。
別のメカニズムを使用して認証するには、 認証メカニズムに関するガイドをご覧ください。 MongoDB クラスターへの接続を確立する方法の詳細については、接続ガイド をお読みください。
認証メカニズムを指定する
次のいずれかを使用して MongoDB に接続するときに、認証メカニズムと認証情報を指定できます。
接続string
MongoCredential
ファクトリー メソッド
接続string (接続 URIとも呼ばれます)は、 MongoDBクラスターへの接続と認証の方法を指定します。
接続文字列 を使用して認証するには、接続string stringに設定を含め、それを MongoClients.create()
メソッドに渡して MongoClient
をインスタンス化します。 Connection String接続string を使用して認証する構文を確認するには、{2 タブを選択します。
あるいは、 MongoCredential
クラスを使用して認証の詳細を指定することもできます。 MongoCredential
クラスには、認証メカニズムと認証情報を含む インスタンスを構築する静的ファクトリー メソッドが含まれています。 MongoCredential
ヘルパー クラスを使用する場合は、 MongoClient
の構築時に接続設定を構成するためにMongoClientSettings.Builder
クラスを使用する必要があります。 MongoCredential
を使用して認証する構文を表示するには、 MongoCredentialタブを選択します。
これらのクラスとメソッドの詳細については、次の API ドキュメントを参照してください。
メカニズム
Kerberos (GSSAPI)
汎用セキュリティ サービス API( GSSAPI
)認証メカニズムにより、ユーザーはユーザーのプリンシパル名を使用して Kerberos サービスで認証できます。
注意
このメソッドでは、ドライバーはGSSAPI
Kerberos
GSSAPI RFC-4652 を使用して認証するため、 ではなく 認証メカニズムが参照されます。 SASL メカニズム。
次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。
username
- URL エンコードされたプリンシパル名(例: "username%40REALM.ME"hostname
- クライアントからアクセス可能な MongoDB 配置のネットワーク アドレスport
- MongoDB 配置のポート番号
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
接続stringを使用して GSSAPI 認証メカニズムを指定するには、次の手順に従います。
authMechanism
URL パラメータに値GSSAPI
を割り当てます(任意)
authSource
URL パラメータに値$external
を割り当てます
注意
GSSAPI
メカニズムを指定する場合、 authSource
を$external
以外の値に割り当てることはできません。
MongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("<db_username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
MongoCredential
クラスを使用して GSSAPI 認証メカニズムを指定するには、 createGSSAPICredential()
メソッドを使用します。 MongoClient
をインスタンス化するコードは次のようになります。
MongoCredential credential = MongoCredential.createGSSAPICredential(<db_username>); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kerberos チケット を取得するには 、GSSAPI Java ライブラリでは、Realm と 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 つを指定するには、次の形式を使用して接続string にURL パラメーターとして含めます:<PROPERTY_NAME>:<value>
GSSAPI と追加の プロパティを使用してMongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("<db_username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
GSSAPI 追加プロパティの 1 つを指定するには、 MongoCredential
インスタンスでwithMechanismProperty()
メソッドを呼び出し、プロパティ名と値をパラメーターとして渡します。 MongoCredential
クラスで定義されているプロパティ名定数を使用します。
[ SERVICE_NAME_KEY ] タブまたは [ Java_SUBJECT_KEY ] タブを選択して、GSSAPI と選択した プロパティを使用するMongoCredential
をインスタンス化するためのサンプル コードを確認します。
MongoCredential credential = MongoCredential.createGSSAPICredential(<db_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(<db_username>); credential = credential.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
デフォルトでは、Java ドライバーはMongoClient
インスタンスごとに Kerberos チケットをキャッシュします。 配置でMongoClient
インスタンスを頻繁に作成および破棄する必要がある場合は、デフォルトの Kerberos チケット キャッシュ動作を プロセスごとにキャッシュすることでパフォーマンスを向上させることができます。
プロセスごとにKerberosチケットをキャッシュするには、MongoCredential
認証メカニズムを使用する必要があります。接続string認証メカニズムでは JAVA_SUBJECT_PROVIDER
メカニズムのプロパティがサポートされていないためです。 プロセスごとに Kerberos チケットをキャッシュする場合は、その方法について詳しくはMongoCredentialタブを選択してください。
プロセスによって Kerberos チケットをキャッシュするには、JAVA_SUBJECT_PROVIDER
メカニズム プロパティを指定し、 KerberosSubjectProvider MongoCredential
を提供する必要があります。 インスタンスの場合プロセスごとに Kerberos チケットをキャッシュするように Java ドライバーを構成するコードは次のようになります。
/* all MongoClient instances sharing this instance of KerberosSubjectProvider will share a Kerberos ticket cache */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential.createGSSAPICredential(<db_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)
MongoDB Enterprise Edition 3.4 以降で利用可能です。
ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。
Tip
認証メカニズムは 、RFC-4616 で定義されている PLAIN 簡易認証とセキュリティ層(SASL) を使用して認証するため、 ではなく という名前が付けられていますPLAIN
LDAP
。
この認証メカニズムを指定するには、authMechanism
パラメータをPLAIN
LDAPに設定し、 接続string に ユーザー名とパスワードを含めます。
次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。
username
- LDAP ユーザー名password
- LDAP ユーザーのパスワードhostname
- クライアントからアクセス可能な MongoDB 配置のネットワーク アドレスport
- MongoDB 配置のポート番号
この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential
LDAP接続 を使用して (PLAIN)認証メカニズムを指定するには、string
authMechanism
URL パラメータに値PLAIN
を割り当てます(任意)
authSource
URL パラメータに値$external
を割り当てます
注意
PLAIN
メカニズムを指定する場合、 authSource
を$external
以外の値に割り当てることはできません。
MongoClient
をインスタンス化するコードは次のようになります。
MongoClient mongoClient = MongoClients.create("<db_username>:<db_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");
MongoCredential
クラスを使用して LDAP(PLAIN)認証メカニズムを指定するには、 createPlainCredential()
メソッドを使用します。 MongoClient
をインスタンス化するコードは次のようになります。
MongoCredential credential = MongoCredential.createPlainCredential(<db_username>, "$external", <db_password>); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());