Docs Menu
Docs Home
/ / /
Java Sync Driver
/

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

項目一覧

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

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

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

  • Kerberos (GSSAPI)

  • LDAP (PLAIN)

  • MONGODB-OIDC

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

重要

MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。

次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。

MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB ServerMongoDB Serverマニュアルの 「 OpenID Connect 認証 」 と 「 パラメーター 」 を参照してください。

アプリケーションが Azure VM 上で実行され、 や Azure インスタンス メタデータ サービス が使用される場合 (MDS)では、Java ドライバーに組み込まれている Azure サポートを使用して MongoDB に認証できます。

Azure IMDS OIDC 認証は、MongoCredential を使用するか、 接続stringの一部として指定できます。

Connection StringMongoCredential対応する構文を表示するには、 タブまたは タブから を選択します。

次のコード内の<percent-encoded audience>プレースホルダーを、MongoDB 配置に構成されたオーディエンス サーバー パラメータのパーセント エンコードされた値に置き換えます。

カンマ( , )文字とそのエンコーディング( %2C )は予約されており、これらの文字を値で使用すると、ドライバーはカンマをキーと値のペアの区切り文字として解釈します。 MongoCredentialタブに示されているように、 MongoCredentialインスタンスではカンマを含む値を指定する必要があります。

MongoClient mongoClient = MongoClients.create(
"mongodb://<db_username>@<hostname>:<port>/?" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");

<db_username>プレースホルダーを、Azure が管理する IdP またはエンタープライズ アプリケーションのクライアント ID またはアプリケーション ID に置き換えます。 <audience>プレースホルダーを、MongoDB 配置に構成されたaudienceサーバー パラメータの値に置き換えます。

MongoCredential credential = MongoCredential.createOidcCredential("<db_username>")
.withMechanismProperty("ENVIRONMENT", "azure")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

アプリケーションが Google Compute Engine VM で実行され、または GCP インスタンス メタデータ サービス を使用している場合 、Java ドライバーの組み込み GCP サポートを使用して MongoDB に認証できます。

GCP IMDS OIDC 認証は、MongoCredential を使用するか、接続stringの一部として指定できます。

Connection StringMongoCredential対応する構文を表示するには、 タブまたは タブから を選択します。

次のコード内の<percent-encoded audience>プレースホルダーを、MongoDB 配置に構成されたオーディエンス サーバー パラメータのパーセント エンコードされた値に置き換えます。

カンマ( , )文字とそのエンコーディング( %2C )は予約されており、これらの文字を値で使用すると、ドライバーはカンマをキーと値のペアの区切り文字として解釈します。 MongoCredentialタブに示されているように、 MongoCredentialインスタンスではカンマを含む値を指定する必要があります。

MongoClient mongoClient = MongoClients.create(
"mongodb://<hostname>:<port>/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");

<audience>プレースホルダーを、MongoDB 配置に構成されたaudienceサーバー パラメータの値に置き換えます。

MongoCredential credential = MongoCredential.createOidcCredential()
.withMechanismProperty("ENVIRONMENT", "gcp")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

Java ドライバーでは、Azure Functions や Azure Kubernetes Service(AKS)を含むすべてのプラットフォームで組み込みサポートを提供していません。 代わりに、OIDC を使用してこれらのプラットフォームから認証するためのカスタム コールバックを定義する必要があります。 そのためには、次のコード例に示すように、 "OIDC_CALLBACK"認証プロパティを使用します。

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK", (context) -> {
String accessToken = ...
return new OidcCallbackResult(accessToken);
});

"OIDC_CALLBACK"プロパティの値は、 OidcCallbackContextをパラメータとして受け入れ、 OidcCallbackResultを返すOidcCallback関数インターフェースの Lambda またはその他の実装である必要があります。

次の例では、サンプル コールバックを使用して、ローカル ファイル システム内の"access-token.dat"という名前のファイルから OIDC トークンを検索します。

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK", (context) -> {
string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat"));
return new OidcCallbackResult(accessToken);
});
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

戻る

認証