Docs Menu
Docs Home
/ / /
Java 同期
/

エンタープライズ認証メカニズム

項目一覧

  • Overview
  • 認証メカニズムを指定する
  • メカニズム
  • Kerberos (GSSAPI)
  • LDAP (PLAIN)

このガイドでは、MongoDB Enterprise Edition でのみ使用可能な各認証メカニズムを使用して MongoDB で認証する方法を学習できます。

MongoDB Enterprise Edition の最新バージョンでは、次のメカニズムを使用できます。

  • Kerberos (GSSAPI)

  • LDAP (PLAIN)

別のメカニズムを使用して認証するには、 認証メカニズムに関するガイドをご覧ください。 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 ドキュメントを参照してください。

汎用セキュリティ サービス API( GSSAPI )認証メカニズムにより、ユーザーはユーザーのプリンシパル名を使用して Kerberos サービスで認証できます。

注意

このメソッドでは、ドライバーはGSSAPI KerberosGSSAPI 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));

注意

Windows では、Oracle の JRE は LSA を使用しています では なく は、Windows Active Directory およびシングル サインオンの実装との相互運用性を制限します。詳しくは、次の記事を参照してください。

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());

戻る

認証メカニズム