Docs Menu
Docs Home
/ / /
Java 同期
/

認証メカニズム

項目一覧

  • Overview
  • 認証メカニズムを指定する
  • メカニズム
  • default
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-CR
  • MONGODB-AWS
  • X.509

このガイドでは、MongoDB Community Edition で利用可能な各認証メカニズムを使用して MongoDB で 認証 する方法を説明します。 認証メカニズムは、ドライバーと MongoDB 配置が ID を確認し、信頼を確立してセキュリティを確保するプロセスです。

MongoDB Community Edition の最新バージョンで使用できるメカニズムは次のとおりです。

KerberosまたはLDAPを使用して認証するには、 エンタープライズ認証メカニズムのガイドを参照してください。 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 ドキュメントを参照してください。

デフォルトの認証メカニズム設定では、MongoDB Server のバージョンがサポートするものに応じて、次のいずれかの認証メカニズムが使用されます。

  1. SCRAM-SHA-256

  2. SCRAM-SHA-1

  3. MONGODB-CR

サーバー バージョン 3.6 以前では、デフォルト メカニズムとしてMONGODB-CRが使用されています。 MongoDB Server の新しいバージョンでは、サポートを広告するメカニズムの 1 つが使用されます。

次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。

  • username - MongoDB のユーザー名

  • password - MongoDB ユーザーのパスワード

  • hostname - クライアントからアクセス可能な MongoDB 配置のネットワーク アドレス

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

  • authenticationDb - ユーザーの認証データが含まれる MongoDB database。 このパラメータを省略すると、ドライバーはデフォルト値のadminを使用します。

この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential

接続stringを使用してデフォルトの認証メカニズムを指定するには、 メカニズムを省略します。 MongoClientをインスタンス化するコードは次のようになります。

MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>");

MongoCredentialクラスを使用してデフォルトの認証メカニズムを指定するには、 createCredential()メソッドを使用します。 MongoClientをインスタンス化するコードは次のようになります。

MongoCredential credential = MongoCredential.createCredential("<db_username>", "<authenticationDb>", "<db_password>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

がサポートするチャレンジ レスポンス (CR) および Salted Challenge Response 認証メカニズム (SCRAM )MongoDB SCRAMの詳細については、MongoDB Server マニュアルの「 」セクションを参照してください。

注意

SCRAM-SHA-256 は、MongoDB 4.0 以降の MongoDB のデフォルトの認証方法です。

SCRAM-SHA-256 は、 SHA-256アルゴリズムで暗号化されたユーザー名とパスワードを使用してユーザーを認証する、Salted Challenge Response 認証メカニズム(SCRAM)です。

次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。

  • username - MongoDB のユーザー名。

  • password - MongoDB ユーザーのパスワード。

  • hostname - クライアントからアクセス可能な MongoDB 配置のネットワーク アドレス。

  • port - MongoDB 配置のポート番号。

  • authenticationDb - ユーザーの認証データが含まれる MongoDB database。 このパラメータを省略すると、ドライバーはデフォルト値のadminを使用します。

この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential

接続文字列 を使用して SCRAM-SHA-256 認証メカニズムを指定するには、 接続stringで、authMechanism パラメータに値 SCRAM-SHA-256 を割り当てstring 。 MongoClientをインスタンス化するコードは次のようになります。

MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=SCRAM-SHA-256");

MongoCredentialクラスを使用してデフォルトの認証メカニズムを指定するには、 createScrimSha256 Credential() を使用します 使用して複数のドキュメントを挿入できます。MongoClientをインスタンス化するコードは次のようになります。

MongoCredential credential = MongoCredential.createScramSha256Credential("<db_username>", "<authenticationDb>", "<db_password>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

注意

SCRAM-SHA-1 は、MongoDB バージョン 3.0、3.2、3.4、および 3.6 のデフォルトの認証方法です。

SCRAM-SHA-1 は、 SHA-1アルゴリズムで暗号化されたユーザー名とパスワードを使用してユーザーを認証する、Salted Challenge Response Authentication Mechanism(SCRAM)です。

次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。

  • username - MongoDB のユーザー名。

  • password - MongoDB ユーザーのパスワード。

  • hostname - クライアントからアクセス可能な MongoDB 配置のネットワーク アドレス。

  • port - MongoDB 配置のポート番号。

  • authenticationDb - ユーザーの認証データが含まれる MongoDB database。 このパラメータを省略すると、ドライバーはデフォルト値のadminを使用します。

この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential

接続文字列 を使用して SCRAM-SHA-1 認証メカニズムを指定するには、 接続stringで、authMechanism パラメータに値 SCRAM-SHA-1 を割り当てstring 。 MongoClientをインスタンス化するコードは次のようになります。

MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=SCRAM-SHA-1");

MongoCredentialクラスを使用してデフォルトの認証メカニズムを指定するには、 createScrimSha1 Credential() を使用します 使用して複数のドキュメントを挿入できます。MongoClientをインスタンス化するコードは次のようになります。

MongoCredential credential = MongoCredential.createScramSha1Credential("<db_username>", "<authenticationDb>", "<db_password>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

MONGODB-CR ユーザー名とパスワードを使用してユーザーを認証するチャレンジレスポンスタイプの認証メカニズムです。 この認証メカニズムは MongoDB 3.6 以降、非推奨となり、MongoDB 4.0 ではサポートされなくなりました。

このメソッドを明示的に指定することはできません。 MONGODB-CRを使用して接続するには、デフォルトの認証メカニズムが提供するフォールバックを参照してください。

注意

MONGODB-AWS 認証メカニズムは MongoDB Atlas で利用できます。

MONGODB-AWS 認証メカニズムは、Amazon Web Services Identity and Access Management(AWS IAM)認証情報を使用してユーザーを認証します。

Amazon Web Servicesの認証情報を環境変数として保存することも、以下の例のようにインラインで挿入することもできます。 ドライバーは、次の順序で認証情報を確認します。

  1. MongoCredential オブジェクトまたは指定された 接続stringに指定された値。

  2. 環境変数。 ( AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 、および任意でAWS_SESSION_TOKEN

  3. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 環境変数で指定されたAmazon Web Services EC2 エンドポイント。

  4. デフォルトのAmazon Web Services EC2 エンドポイント。 詳しくは、「 タスクの IAM ロール 」を 参照してください。

次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。

  • awsKeyId AWS_ACCESS_KEY_IDの - 値。

  • awsSecretKey AWS_SECRET_ACCESS_KEYの - 値。

  • atlasUri - MongoDB Atlas インスタンスのネットワークアドレス。

  • awsSessionToken AWS_SESSION_TOKENの - 値。 (任意)

重要

認証情報を URL エンコードする

バックスラッシュやその他の文字による解析エラーが発生しないように、必ず認証情報を URL エンコードしてください。 次のコード例は、プレースホルダーfieldValueで表されるサンプル string を URL エンコードする方法を示しています。

String encodedField = java.net.URLEncoder.encode("<fieldValue>".toString(), "ISO-8859-1");

この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential

接続文字列 を使用して MONGODB-AWS 認証メカニズムを指定するには、 接続stringで、authMechanism パラメータに値 "MONGODB-AWS" を割り当てstring 。 MongoClientをインスタンス化するコードは次のようになります。

MongoClient mongoClient = MongoClients.create("mongodb://<awsKeyId>:<awsSecretKey>@<atlasUri>?authMechanism=MONGODB-AWS");

Amazon Web Servicesセッション トークンを指定する必要がある場合は、AWS_SESSION_TOKEN:<awsSessionToken> 形式を使用して次のように authMechanismProperties パラメータに含めます。 セッション トークンを使用してMongoClientをインスタンス化するコードは次のようになります。

MongoClient mongoClient = MongoClients.create("mongodb://<awsKeyId>:<awsSecretKey>@<atlasUri>?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<awsSessionToken>");

MONGODB-AWSMongoCredentialクラスを使用して 認証メカニズムを指定するには、 createAwsCredential() 使用して複数のドキュメントを挿入できます。MongoClientをインスタンス化するコードは次のようになります。

MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray());
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>"))))
.credential(credential)
.build());

Amazon Web Servicesセッショントークンを指定する必要がある場合は、次のいずれかの選択を使用して追加できます。

  • 接続 で Amazon Web Servicesセッション トークンを指定します。string

    接続 で と一緒に のセッション トークンを渡す場合は、Amazon Web Servicesstring MongoCredentialパラメータに認証メカニズムを指定し、authMechanism パラメータにセッションauthMechanismProperties トークンを指定します。次に、MongoClientSettings applyConnectionString() メソッドを呼び出して に追加します メソッドを次のとおり使用します。

    MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray());
    ConnectionString connectionString = new ConnectionString("mongodb://<atlasUri>/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<awsSessionToken>");
    MongoClient mongoClient = MongoClients.create(
    MongoClientSettings.builder()
    .applyConnectionString(connectionString)
    .credential(credential)
    .build());
  • MongoCredential でAmazon Web Servicesセッション トークンを指定します。

    withMechanismProperty() の呼び出しで Amazon Web ServicesAmazon Web Services セッション トークンを指定することで、 インスタンスに セッションMongoCredential トークンを含めることができます。 以下に示すように、

    MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()).withMechanismProperty("AWS_SESSION_TOKEN", "<awsSessionToken>");
    ConnectionString connectionString = new ConnectionString("mongodb://<atlasUri>/?authMechanism=MONGODB-AWS");
    MongoClient mongoClient = MongoClients.create(
    MongoClientSettings.builder()
    .applyConnectionString(connectionString)
    .credential(credential)
    .build());
  • 環境変数でAmazon Web Servicesセッション トークンを指定します。

    クライアント実行環境で、 AWS_SESSION_TOKENという環境変数を設定し、その環境にトークンを割り当てます。 MONGODB-AWS認証メカニズムを指定すると、値はMongoClientによって自動的に選択されます。

ドライバーは、ロールを想定したり、 Elastic Kubernetes Serviceを使用したりする場合など、認証情報の更新をサポートしています。

Supplier<AwsCredential> awsFreshCredentialSupplier = () -> {
// Add your code to fetch new credentials, such as assuming a role using the AWS SDK.
// Ensure you return the temporary credentials.
return new AwsCredential("<awsKeyId>", "<awsSecretKey>", "<awsSessionToken>");
};
MongoCredential credential = MongoCredential.createAwsCredential(null, null)
.withMechanismProperty(MongoCredential.AWS_CREDENTIAL_PROVIDER_KEY, awsFreshCredentialSupplier);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Collections.singletonList(new ServerAddress("<hostname>", 27017))))
.credential(credential)
.build());

注意

Amazon Web Services接続 で IAM 認証情報を提供する必要がある場合は、string MONGODB-Amazon Web Services ドライバーのドキュメントの以前のリリースを参照してください。

X.509認証メカニズムは TLS を使用する X.509 証明書と併用して、クライアント証明書の相対的識別名(RDN)によって識別されるユーザーを認証できます。X.509認証メカニズムを指定すると、サーバーはクライアント証明書のサブジェクト名を使用して接続を認証します。

次のコード スニペットは、次のプレースホルダーを使用して認証メカニズムを指定する方法を示しています。

  • hostname - クライアントからアクセス可能な MongoDB 配置のネットワーク アドレス。

  • port - MongoDB 配置のポート番号。

  • authenticationDb - ユーザーの認証データが含まれる MongoDB database。 このパラメータを省略すると、ドライバーはデフォルト値のadminを使用します。

この認証メカニズムを指定するための手順とサンプル コードについては、以下の [ ] タブまたは [Connection String ] タブを選択してください。MongoCredential

接続stringを使用して X.509 認証メカニズムを指定するには、authMechanism パラメータに値 MONGODB-X509 を割り当て、tls パラメータに true 値を割り当てて TLS を有効にします。 MongoClientをインスタンス化するコードは次のようになります。

MongoClient mongoClient = MongoClients.create("mongodb://<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=MONGODB-X509&tls=true");

クラスを使用して 認証メカニズムを指定するには、 createMongoX509 認証情報() X.509を使用しますMongoCredential 使用して複数のドキュメントを挿入できます。また、 applyToSslSettings() メソッド を呼び出して TLS を有効にしますenabled メソッドを使用して、true SslSettings.Builder で プロパティを に設定する。 ブロック。MongoClientをインスタンス化するコードは次のようになります。

MongoCredential credential = MongoCredential.createMongoX509Credential();
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.applyToSslSettings(builder ->
builder.enabled(true);
)
.credential(credential)
.build());

証明書と TLS/SSL オプションを使用するようにアプリケーションを構成する方法の詳細については、 TLS/SSL ガイド を参照してください。

戻る

JNDI データソースを使用した MongoDB への接続