Docs Menu
Docs Home
/ / /
Node.js
/ /

認証メカニズム

項目一覧

  • DEFAULT
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-CR
  • MONGODB-AWS
  • X.509
  • TLS/SSL オプション

このガイドでは、MongoDB コミュニティ エディション で使用可能な各認証メカニズム(DEFAULTSCRAM-SHA-256SCRAM-SHA-1MONGODB-CRMONGODB-AWSX.509)を使用して MongoDB に接続するためのサンプル コードを紹介します。

DEFAULT 認証メカニズムは、サーバーによってサポートされている最初の認証メカニズムを次の優先順位でネゴシエートするようにドライバーに指示するフォールバック設定です。

  1. SCRAM-SHA-256

  2. SCRAM-SHA-1

  3. MONGODB-CR

DEFAULT オプションが指定されている場合、ドライバーは最初に SCRAM-SHA-256 を使用して認証を試みます。MongoDB インスタンスのバージョンがそのメカニズムをサポートしていない場合、ドライバーは SCRAM-SHA-1 を使用して認証を試みます。インスタンスがそのメカニズムもサポートしていない場合、ドライバーは MONGODB-CR を使用して認証を試みます。

この認証メカニズムを指定するには、接続stringauthMechanism パラメータを DEFAULT に設定するか、デフォルト値であるためパラメーターを省略します。 また、以下のコードに示すように、ユーザー名とパスワードを含めます。

重要

ユーザー名とパスワードが正しく解析されるようにするには、必ず encodeURIComponent メソッドを使用して URI エンコード してください。

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const username = encodeURIComponent("<username>");
const password = encodeURIComponent("<password>");
const clusterUrl = "<MongoDB cluster url>";
const authMechanism = "DEFAULT";
// Replace the following with your MongoDB deployment's connection string.
const uri =
`mongodb+srv://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}`;
// Create a new MongoClient
const client = new MongoClient(uri);
// Function to connect to the server
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

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

注意

SCRAM-SHA-256 MongoDB バージョン 4.0 以降のデフォルトの認証方法です。

SCRAM-SHA-256 は、SHA-256 アルゴリズムで暗号化されたユーザー名とパスワードを使用してユーザーを認証する、ソルト付きチャレンジ レスポンス認証メカニズム(SCRAM)です。

この認証メカニズムを指定するには、次のサンプル コードに示すように、接続stringauthMechanism を値 SCRAM-SHA-256 に設定します。

重要

ユーザー名とパスワードが正しく解析されるようにするには、必ず encodeURIComponent メソッドを使用して URI エンコード してください。

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const username = encodeURIComponent("<username>");
const password = encodeURIComponent("<password>");
const clusterUrl = "<MongoDB cluster url>";
const authMechanism = "SCRAM-SHA-256";
// Replace the following with your MongoDB deployment's connection string.
const uri =
`mongodb+srv://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}`;
// Create a new MongoClient
const client = new MongoClient(uri);
// Function to connect to the server
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

注意

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

SCRAM-SHA-1 は、SHA-1 アルゴリズムで暗号化されたユーザー名とパスワードを使用してユーザーを認証する、ソルト付きチャレンジ レスポンス メカニズム(SCRAM)です。

この認証メカニズムを指定するには、次のサンプル コードに示すように、接続文字列authMechanism パラメーターを値 SCRAM-SHA-1 に設定します。

重要

ユーザー名とパスワードが正しく解析されるようにするには、必ず encodeURIComponent メソッドを使用して URI エンコード してください。

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const username = encodeURIComponent("<username>");
const password = encodeURIComponent("<password>");
const clusterUrl = "<MongoDB cluster url>";
const authMechanism = "SCRAM-SHA-1";
// Replace the following with your MongoDB deployment's connection string.
const uri =
`mongodb+srv://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}`;
// Create a new MongoClient
const client = new MongoClient(uri);
// Function to connect to the server
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

警告

MONGODB-CR は MongoDB 3.6 から非推奨となり、MongoDB 4.0 以降ではサポートされなくなりました。

MONGODB-CR ユーザー名とパスワードを使用してユーザーを認証するチャレンジレスポンスタイプの認証メカニズムです。

このオプションを指定するには、次のサンプル コードに示すように、接続文字列authMechanism パラメーターを値 MONGODB-CR に設定します。

重要

ユーザー名とパスワードが正しく解析されるようにするには、必ず encodeURIComponent メソッドを使用して URI エンコード してください。

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const username = encodeURIComponent("<username>");
const password = encodeURIComponent("<password>");
const clusterUrl = "<MongoDB cluster url>";
// Replace the following with your MongoDB deployment's connection string.
const uri =
`mongodb+srv://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}&tls=true&tlsCertificateKeyFile=${clientPEMFile}`;
// Create a new MongoClient
const client = new MongoClient(uri);
// Function to connect to the server
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

重要

認証スキーマを MONGODB-CR から SCRAM にアップグレードした場合、MONGODB-CR ユーザーの認証リクエストはすべて失敗します。

注意

MONGODB-AWS 認証メカニズムは、MongoDB バージョン 4.4 以降でのみ使用できます。

MONGODB-AWS 認証メカニズムは、Amazon Web Services Identity and Access Management (AWS IAM) 認証情報を使用してユーザーを認証します。AWS 署名ライブラリをまだ持っていない場合は、次の npm コマンドを使用してインストールします。

npm install aws4

MONGODB-AWS 認証が有効な状態の MongoDB インスタンスに接続するには、MONGODB-AWS認証メカニズムを指定します。

ドライバーは、次のソースで認証情報を順番に確認します。

  1. 接続文字列

  2. 環境変数

  3. Web ID トークン ファイル

  4. 次の場所で指定されたAWS ECSエンドポイント: AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

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

重要

ドライバーは、前述のリストで指定された順序で、最初に検出した方法からのみ認証情報を読み取ります。たとえば、接続文字列で AWS 認証情報を指定すると、ドライバーは環境変数で指定した認証情報を無視します。

接続文字列を使用して MongoDB インスタンスに接続するには、接続時に認証情報 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY をドライバーに渡します。AWS ログインにセッション トークンが必要な場合は、AWS_SESSION_TOKEN も含めます。

次は、接続文字列で MONGODB-AWS 認証メカニズムと認証情報を指定するコード例です。

重要

正しく解析されるようにするには、encodeURIComponent メソッドを使用して、ユーザー名と証明書ファイルのパスを常に URI エンコードします。

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const accessKeyId = encodeURIComponent("<AWS_ACCESS_KEY_ID>");
const secretAccessKey = encodeURIComponent("<AWS_SECRET_ACCESS_KEY>");
const clusterUrl = "<MongoDB cluster url>";
const authMechanism = "MONGODB-AWS";
let uri =
`mongodb+srv://${accessKeyId}:${secretAccessKey}@${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`;
// Uncomment the following lines if your AWS authentication setup requires a session token.
// const sessionToken = encodeURIComponent("<AWS_SESSION_TOKEN>");
// uri = uri.concat(`&authMechanismProperties=AWS_SESSION_TOKEN:${sessionToken}`);
// Create a new MongoClient.
const client = new MongoClient(uri);
async function run() {
try {
// Establish and verify connection.
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server.");
} finally {
// Ensure that the client closes when it finishes/errors.
await client.close();
}
}
run().catch(console.dir);

MongoDBAmazon Web Services環境変数に保存されている の認証情報を使用して インスタンスに対して認証するには、shell を使用して次の変数を設定します。

export AWS_ACCESS_KEY_ID=<awsKeyId>
export AWS_SECRET_ACCESS_KEY=<awsSecretKey>
export AWS_SESSION_TOKEN=<awsSessionToken>

注意

そのロールにAmazon Web Servicesのセッショントークンが必要ない場合は、AWS_SESSION_TOKEN を含む行を省略します。

上記の環境変数を設定したら、次の例に示すように接続stringで MONGODB-AWS 認証メカニズムを指定します。

const { MongoClient } = require("mongodb");
// Remember to specify your AWS credentials in environment variables.
const clusterUrl = "<MongoDB deployment url>";
const authMechanism = "MONGODB-AWS";
let uri =
`mongodb+srv://${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`;
// Create a new MongoClient.
const client = new MongoClient(uri);
async function run() {
try {
// Establish and verify connection.
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server.");
} finally {
// Ensure that the client closes when it finishes/errors.
await client.close();
}
}
run().catch(console.dir);

Web IDP から取得した OpenID Connect(OIDC)トークンを使用して、Amazon Elastic Kubernetes Service(EKS)またはその他のサービスを認証できます。

OIDC トークンで認証するには、まず @aws-sdk/credential-providers を インストールする必要があります 。この依存関係は、次のnpmコマンドを使用してインストールできます。

npm install @aws-sdk/credential-providers

次に、OIDC トークンを含む ファイルを作成します。 次に、次の例に示すように shell を使用して、環境変数内のこのファイルへの絶対パスを設定します。

export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>

上記の環境変数を設定したら、次の例に示すように接続stringで MONGODB-AWS 認証メカニズムを指定します。

const { MongoClient } = require("mongodb");
// Remember to specify your AWS credentials in environment variables.
const clusterUrl = "<MongoDB deployment url>";
const authMechanism = "MONGODB-AWS";
let uri =
`mongodb+srv://${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`;
// Create a new MongoClient.
const client = new MongoClient(uri);
async function run() {
try {
// Establish and verify connection.
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server.");
} finally {
// Ensure that the client closes when it finishes/errors.
await client.close();
}
}
run().catch(console.dir);

重要

AWS 認証情報の取得

バージョン 4.11 以降では、オプションの aws-sdk/credential-providers 依存関係をインストールすると、ドライバーは AWS SDK を使用して環境から認証情報を検索します。その結果、共有 AWS 認証情報ファイルまたは設定ファイルがある場合、ドライバーはデフォルトでそれらの認証情報を使用します。

次のいずれかのアクションを実行することで、この動作を上書きできます。

  • シェル内の AWS_SHARED_CREDENTIALS_FILE 変数を認証情報ファイルを指すように設定します。

  • アプリケーション内の同等の環境変数を、認証情報ファイルを指すように設定します。

  • MongoDB 認証情報用の AWS プロファイルを作成し、AWS_PROFILE 環境変数をそのプロファイル名に設定します。

注意

X.509 認証メカニズムは、MongoDB バージョン 2.6 以降でのみ使用できます。

X.509 認証メカニズムは、X.509 証明書とともに TLS を使用して、クライアント証明書から識別名(DN)を検索することで認証します。

この認証メカニズムを指定するには、接続文字列: の次のパラメーターを設定します。

  • authMechanism パラメーターを MONGODB-X509 に設定する

  • tls パラメーターを true に設定する

接続 URI のパラメーターとして、クライアント証明書ファイルの場所を tlsCertificateKeyFile の値として渡します。

重要

正しく解析されるようにするには、必ず encodeURIComponent メソッドを使用して証明書ファイルのパスを URI エンコード してください。

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const clusterUrl = "<MongoDB cluster url>";
const clientPEMFile = encodeURIComponent("<path to the client pem certificate file>");
const authMechanism = "MONGODB-X509";
// Replace the following with your MongoDB deployment's connection string.
const uri =
`mongodb+srv://${clusterUrl}/?authMechanism=${authMechanism}&tls=true&tlsCertificateKeyFile=${clientPEMFile}`;
// Create a new MongoClient
const client = new MongoClient(uri);
// Function to connect to the server
async function run() {
try {
// Establish and verify connection
await client.db("admin").command({ ping: 1 });
console.log("Connected successfully to server");
} finally {
// Ensures that the client will close when you finish/error
await client.close();
}
}
run().catch(console.dir);

次の表では、接続 URI のパラメーターとして渡すことができる各 TLS/SSL オプションについて説明します。

パラメーター名
タイプ
デフォルト値
説明
tls
ブール値
false
TLS/SSL 接続を使用するかどうかを指定します。
tlsInsecure
ブール値
false
無効な証明書と一致しないホスト名を許可するかどうかを指定します。true に設定すると、tlsAllowInvalidCertificatestlsAllowInvalidHostnamestrue に設定するのと同じになります。
tlsCAFile
string
TLS 接続で使用される単一のまたは一連の信頼できる証明機関を含むファイルへのパス。
tlsCertificateKeyFile
string
クライアント証明書ファイルまたはクライアント秘密キー ファイルへのパス。両方必要な場合は、2 つを 1 つのファイルに連結する必要があります。
tlsCertificateKeyFilePassword
バッファまたは文字列
クライアントの秘密キーを復号化するためのパスワードを含む文字列またはバッファ。
tlsAllowInvalidCertificates
ブール値
false
ドライバーが無効な証明書を使用して接続することを許可するかどうかを指定します。
tlsAllowInvalidHostnames
ブール値
false
ドライバーがサーバーのホスト名と TLS 証明書のホスト名の不一致を許可するかどうかを指定します。

戻る

認証