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

認証

項目一覧

  • MongoCredential
  • デフォルトの認証メカニズム
  • SCRAM ベースのメカニズム
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-CR
  • x.509
  • Kerberos (GSSAPI)
  • LDAP (PLAIN)

ドライバーは、MongoDB Enterprise Edition でのみ使用可能な認証メカニズムを含む、すべての MongoDB 認証メカニズムをサポートしています。

次のインポート ステートメントを含めます。

import com.mongodb.MongoCredential;
import com.mongodb.ConnectionString;
import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;

認証情報は MongoCredentialクラスのインスタンスとして表されます。 MongoCredentialクラスには、サポートされている各認証メカニズムの静的ファクトリー メソッドが含まれています。

MongoDB 3.0では、 MongoDB はデフォルトの認証メカニズムをMONGODB-CRからSCRAM-SHA-1に変更しました。 MongoDB 4.0では、非推奨のMONGODB-CRメカニズムのサポートが削除され、 SCRAM- SHA-256のサポートが追加されました。

サーバーのバージョンに関係なく、デフォルトの認証メカニズムを使用して認証する認証情報を作成するには、 createCredential()静的ファクトリー メソッドを使用して認証情報を作成します。

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createCredential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

あるいは、認証メカニズムを明示的に指定せずに接続stringを使用することもできます。

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1");

チャレンジ メカニズムとレスポンス メカニズムでは、認証スキーマをアップグレードした後でも、MongoDB 2.6から MongoDB 3.0へのアップグレードがより簡単になるため、デフォルトの認証メカニズムを使用することをお勧めします。 MongoDB 4.0ユーザーの場合、メカニズムがチェックされ、正しいハッシュ アルゴリズムが使用されているため、デフォルトの認証メカニズムを使用することも推奨されます。

Salted Challenge Response Authentication Mechanism( SCRAM )は、 3.0以降の MongoDB のデフォルトの認証メカニズムです。 SCRAM IETF RFC5802 に基づいています パスワードを使用してユーザーを認証するためのチャレンジ レスポンス メカニズムの実装に関するベスト プラクティスを定義する標準。

MongoDB 3.0は、 SHA-1ハッシュ関数を使用するSCRAM-SHA-1のサポートを導入しました。 MongoDB 4.0は、 SHA-256ハッシュ関数を使用するSCRAM- SHA-256のサポートを導入しました。

このメカニズムを使用するには、MongoDB 4.0とfeatureCompatibilityVersionを4.0に設定する必要があります。

SCRAM-SHA-256タイプの認証情報を明示的に作成するには、 createScramSha256Credential()メソッドを使用します。

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createScramSha256Credential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

または、authMechanism=SCRAM-SHA-256 を明示的に指定する接続stringを使用できます。

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-256");

SCRAM-SHA-1タイプの認証情報を明示的に作成するには、 createScramSha1Credential()メソッドを使用します。

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createScramSha1Credential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

または、authMechanism=SCRAM-SHA-1 を明示的に指定する接続stringを使用できます。

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-1");

重要

MongoDB バージョン 4.0 以降では、非推奨の MongoDB Challenge-Response( MONGODB-CR )認証メカニズムのサポートが削除されます。

配置にユーザー認証情報がMONGODB-CRスキーマに保存されている場合は、 バージョン4.0にアップグレードする前に、 SCRAMベースのメカニズムを使用するようにアップグレードする必要があります。

MONGODB-CRタイプの認証情報を明示的に作成するには、 createMongCRCredential()静的ファクトリー メソッドを使用します。

String user; // the user name
String database; // the name of the database in which the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createMongoCRCredential(user, database, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

または、authMechanism=MONGODB-CR を明示的に指定する接続stringを使用できます。

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=MONGODB-CR");

注意

認証スキーマをMONGODB-CRからSCRAMにアップグレードすると、 MONGODB-CRの認証情報は認証に失敗します。

X.509メカニズムでは、MongoDB は SSL ネゴシエート中に提示された X. 509証明書を使用して、X. 509証明書の識別名から派生したユーザーを認証します。

X. 509認証では、証明書検証を使用した SSL 接続を使用する必要があります。 このタイプの認証情報を作成するには、 createMongoX509Credential()静的ファクトリー メソッドを使用します。

String user; // The X.509 certificate derived user name, e.g. "CN=user,OU=OrgUnit,O=myOrg,..."
// ...
MongoCredential credential = MongoCredential.createMongoX509Credential(user);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

または、authMechanism=MONGODB-X509 を明示的に指定する接続stringを使用できます。

MongoClient mongoClient = MongoClients.create("mongodb://subjectName@host1/?authMechanism=MONGODB-X509&ssl=true");

x509 を使用する 」を参照してください。 証明書からサブジェクト名を決定する方法の詳細については、サーバー マニュアルの「 クライアントを認証するため の証明書 」のチュートリアルを参照してください。

MongoDB Enterprise は、Kerberos サービスによるプロキシ認証をサポートしています。 Kerberos タイプ(GSSAPI)の認証情報を作成するには、 createGSSAPICredential()静的ファクトリー メソッドを使用します。

String user; // The Kerberos user name, including the realm, e.g. "user1@MYREALM.ME"
// ...
MongoCredential credential = MongoCredential.createGSSAPICredential(user);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

または、authMechanism=GSSAPI を明示的に指定する接続stringを使用できます。

MongoClient mongoClient = MongoClients.create("mongodb://username%40REALM.ME@host1/?authMechanism=GSSAPI");

注意

ドライバーはGSSAPI SASL メカニズムを使用して認証するため、 メソッドはKerberosではなくGSSAPI認証メカニズムを参照します。

Kerberos を使用して正常に認証するには、アプリケーションは通常、基礎の GSSAPI Java ライブラリが Kerberos チケットを取得できるように、いくつかのシステム プロパティを指定する必要があります。

java.security.krb5.realm=MYREALM.ME
java.security.krb5.kdc=mykdc.myrealm.me

Kerberos の設定によっては、アプリケーション コード内で、またはMongoCredentialインスタンスのwithMechanismProperty()メソッドを使用して、追加のプロパティ指定が必要になる場合があります。

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

次のコードは、 MongoCredentialオブジェクト内でSERVICE_NAMEプロパティを指定する方法を示しています。

credential = credential.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "othername");

または、 ConnectionString内でSERVICE_NAMEプロパティを指定することもできます。

uri = "mongodb://username%40MYREALM.com@myserver/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:othername"

注意

Windows では、Oracles JRE は LSA を使用しています では なく これは Windows Active Directory との相互運用性を制限し、特にシングル サインオンを実装する機能を制限します。

MongoDB Enterprise は、 LDAP(Lightweight Directory Access Protocol)サービスを通してプロキシ認証をサポートしています。 LDAPタイプの認証情報を作成するには、 createPlainCredential()静的ファクトリー メソッドを使用します。

String user; // The LDAP user name
char[] password; // The LDAP password
// ...
MongoCredential credential = MongoCredential.createPlainCredential(user, "$external", password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

または、authMechanism=PLAIN を明示的に指定する接続stringを使用できます。

MongoClient mongoClient = MongoClients.create("mongodb://user1@host1/?authSource=$external&authMechanism=PLAIN");

注意

ドライバーはPLAIN SASL メカニズムを使用して認証するため、 メソッドはLDAPではなくPLAIN認証メカニズムを参照します。

戻る

TLS/SSL