Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー
/

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

項目一覧

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

MongoDB Enterprise Edition には、 MongoDB Community Edition では使用できない認証メカニズムが含まれています。 このガイドでは、これらの認証メカニズムを使用してMongoDBを認証する方法を学習できます。 MongoDBで利用可能なその他の認証メカニズムについて詳しくは、「 認証メカニズムのガイド」をご覧ください。

MongoDBに接続するときに、次のいずれかの方法を使用して認証メカニズムと認証情報を指定できます。

  • 接続文字列

  • MongoCredential ファクトリー メソッド

接続string接続 URIとも呼ばれます)は、 MongoDBクラスターへの接続と認証の方法を指定します。

接続文字列 を使用して認証するには、 接続string stringに設定を含め、それを MongoClients.create() メソッドに渡して MongoClient をインスタンス化します。 Connection String接続 を使用して認証するための構文を確認するには、次のセクションで {2string タブを選択します。

また、認証の詳細を指定するために、 MongoCredentialクラスを使用することもできます。 MongoCredentialクラスには、認証メカニズムと認証情報を含む インスタンスを構築する静的ファクトリー メソッドが含まれています。 MongoCredentialヘルパークラスを使用する場合は、接続設定を構成するためにMongoClientSettings.Builderクラスを使用します。 MongoCredentialを使用して認証する構文を確認するには、次のセクションでMongoCredentialタブを選択します。

ジェネリック セキュリティ サービス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 Expression Center)システム プロパティを指定する必要があります。次の例に示すように、これらの設定を設定できます。

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 追加プロパティを指定するには、接続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タブを選択してください。

プロセスごとに KerberosJAVA_SUBJECT_PROVIDERMongoCredential チケットをキャッシュするには、 メカニズムプロパティを指定し、 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 は LSA を使用しています では なく これはWindows Active Directory およびシングル サインオンの実装との相互運用性を制限します。詳細については、次のリソースを参照してください。

ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。

Tip

認証メカニズムは 、RFC-4616 で定義されている PLAIN 簡易認証とセキュリティ層(SASL) を使用して認証するため、 ではなく という名前が付けられていますPLAIN LDAP

次のセクションには、次のプレースホルダーを使用するコード例が含まれています。

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

重要

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

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

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

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

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

Connection StringMongoCredential対応する構文を確認するには、 タブまたは タブを選択します。

<username>プレースホルダーを、 Azureが管理する IdP またはエンタープライズアプリケーションのクライアントIDまたはアプリケーションIDに置き換えます。 次のコード内の<percent-encoded audience>プレースホルダーを、 MongoDBデプロイに構成されたオーディエンスサーバーパラメータのパーセント エンコードされた値に置き換えます。

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

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

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

MongoCredential credential = MongoCredential.createOidcCredential("<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 Reactive Streams ドライバーに組み込まれているGCPサポートを使用して、 MongoDBに認証できます。

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

次のセクションには、次のプレースホルダーを使用するコード例が含まれています。

  • hostname: クライアントがアクセスできる MongoDB 配置のネットワーク アドレス

  • port: MongoDB 配置のポート番号

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 Reactive Streams ドライバーでは、 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());

戻る

認証