Docs Menu
Docs Home
/ / /
Node.js 드라이버
/ /

인증 메커니즘.

이 페이지의 내용

  • DEFAULT
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-CR
  • MONGODB-AWS
  • X.509
  • TLS 옵션

이 가이드에서는 MongoDB 커뮤니티 에디션에서 제공하는 각 인증 메커니즘을 사용하여 MongoDB에 연결하기 위한 샘플 코드를 찾을 수 있습니다: DEFAULT, SCRAM-SHA-256, SCRAM-SHA-1, MONGODB-CR, MONGODB-AWS, X.509.

DEFAULT 인증 메커니즘은 서버가 지원하는 첫 번째 인증 메커니즘을 다음과 같은 우선 순위에 따라 협상하도록 드라이버에 지시하는 대체 설정입니다.

  1. SCRAM-SHA-256

  2. SCRAM-SHA-1

  3. MONGODB-CR

DEFAULT 옵션을 지정하면 드라이버는 우선 SCRAM-SHA-256을 사용하여 인증을 시도합니다. MongoDB 인스턴스 버전이 해당 메커니즘을 지원하지 않는 경우 드라이버는 SCRAM-SHA-1을 사용하여 인증을 시도합니다. 인스턴스가 해당 메커니즘을 지원하지 않는 경우 드라이버는 MONGODB-CR을 사용하여 인증을 시도합니다.

연결 문자열 에서 authMechanism 매개 변수를 DEFAULT 로 설정하거나 매개 변수가 기본값이므로 생략하여 이 인증 메커니즘을 지정할 수 있습니다. 아래 코드에 표시된 대로 사용자 이름과 비밀번호도 포함하세요.

중요

사용자 이름과 비밀번호가 올바르게 구문 분석되도록 항상 encodeURIComponent 메서드를 사용하여 사용자 이름과 비밀번호를 URI 인코딩합니다.

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const username = encodeURIComponent("<db_username>");
const password = encodeURIComponent("<db_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) 및 솔티드 챌린지-응답 인증 메커니즘(SCRAM)에 대한 자세한 내용은 매뉴얼의 SCRAM 섹션을 참조하세요.

참고

SCRAM-SHA-256 MongoDB 버전 4.0부터 기본 인증 방법입니다.

SCRAM-SHA-256 SHA-256 알고리즘으로 암호화된 사용자 이름과 비밀번호를 사용해 사용자를 인증하는 SCRAM(salted challenge-response authentication mechanism)입니다.

다음 샘플 코드에 표시된 대로 연결 문자열 에서 authMechanismSCRAM-SHA-256 값으로 설정하여 이 인증 메커니즘을 지정할 수 있습니다.

중요

사용자 이름과 비밀번호가 올바르게 구문 분석되도록 항상 encodeURIComponent 메서드를 사용하여 사용자 이름과 비밀번호를 URI 인코딩합니다.

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const username = encodeURIComponent("<db_username>");
const password = encodeURIComponent("<db_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(salted challenge-response mechanism)입니다.

다음 샘플 코드에 표시된 대로 연결 문자열 에서 authMechanism 매개 변수를 SCRAM-SHA-1 값으로 설정하여 이 인증 메커니즘을 지정할 수 있습니다.

중요

사용자 이름과 비밀번호가 올바르게 구문 분석되도록 항상 encodeURIComponent 메서드를 사용하여 사용자 이름과 비밀번호를 URI 인코딩합니다.

const { MongoClient } = require("mongodb");
// Replace the following with values for your environment.
const username = encodeURIComponent("<db_username>");
const password = encodeURIComponent("<db_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("<db_username>");
const password = encodeURIComponent("<db_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 인증 메커니즘은 AWS IAM(Amazon Web Services Identity and Access Management) 자격 증명을 사용하여 사용자를 인증합니다. AWS 서명 라이브러리가 아직 없는 경우 다음 npm 명령을 사용하여 설치하십시오.

npm install aws4

MONGODB-AWS 인증을 활성화한 상태로 MongoDB에 연결하려면 MONGODB-AWS 인증 메커니즘을 지정합니다.

드라이버는 다음 소스에서 자격 증명을 순서대로 확인합니다:

  1. 연결 문자열

  2. 환경 변수

  3. 웹 ID 토큰 파일

  4. 지정된 AWS ECS 엔드포인트 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

  5. AWS 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);

환경 변수에 저장된 Amazon Web Services 자격 증명을 사용하여 MongoDB 인스턴스를 인증하려면 shell 을 사용하여 다음 변수를 설정합니다.

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

참고

해당 역할에 대해 AWS 세션 토큰이 필요하지 않은 경우 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);

웹 ID 제공자로부터 얻은 OIDC(OpenID Connect) 토큰을 사용하여 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);

연결에서 TLS를 활성화하는 방법에 대해 자세히 알아보려면 연결에서TLS 활성화를 참조하세요.

다음 표에서는 연결 URI에서 설정할 수 있는 TLS 옵션에 대해 설명합니다.

매개변수 이름
유형
기본값
설명
tls
부울
false
연결에서 TLS를 사용할지 여부를 지정합니다.
tlsInsecure
부울
false
유효하지 않은 인증서 및 일치하지 않는 호스트 이름을 허용할지 여부를 지정합니다. true로 설정하면 tlsAllowInvalidCertificatestlsAllowInvalidHostnamestrue로 설정하는 것과 같습니다.
tlsCAFile
문자열
TLS 연결에 사용되는 신뢰할 수 있는 하나 또는 여러 인증 기관을 포함하는 파일의 경로입니다.
tlsCertificateKeyFile
문자열
클라이언트 인증서 파일 또는 클라이언트 비공개 키 파일의 경로입니다. 둘 다 필요한 경우 두 파일을 단일 파일로 연결해야 합니다.
tlsCertificateKeyFilePassword
버퍼 또는 문자열
클라이언트 비공개 키를 해독하기 위한 비밀번호가 포함된 문자열 또는 버퍼입니다.
tlsAllowInvalidCertificates
부울
false
드라이버에서 유효하지 않은 인증서를 연결에 사용할 수 있도록 허용할지 여부를 지정합니다.
tlsAllowInvalidHostnames
부울
false
서버 호스트 이름과 TLS 인증서 호스트 이름이 일치하지 않을 때 드라이버가 오류를 발생시킬지를 지정합니다.

돌아가기

인증