Docs Menu
Docs Home
/ / /
C#/.NET
/

엔터프라이즈 인증 메커니즘

이 페이지의 내용

  • 개요
  • GSSAPI/Kerberos로 인증
  • additionalProperties
  • LDAP(PLAIN)로 인증
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • 사용자 지정 콜백
  • API 문서

이 가이드에서는 MongoDB Enterprise Edition에서만 사용할 수 있는 인증 메커니즘 을 사용하여 MongoDB로 인증하는 방법을 배울 수 있습니다. 인증 메커니즘은 드라이버와 서버가 연결 전에 보안을 보장하기 위해 클라이언트의 ID를 확인하는 프로세스입니다.

최신 버전의 MongoDB Enterprise Edition에서 다음 인증 메커니즘을 사용할 수 있습니다.

  • GSSAPI/Kerberos

  • LDAP (Plain)

  • MONGODB-OIDC

다른 메커니즘을 사용하여 인증하려면 인증 메커니즘 기본 사항 페이지를 참조하세요. MongoDB cluster 에 대한 연결 설정에 대한 자세한 내용은 연결 가이드를 참조하세요.

다음 방법 중 하나를 사용하여 MongoDB에 연결할 때 인증 메커니즘 및 자격 증명을 지정할 수 있습니다.

  • 연결 문자열(연결 URI 라고도 함)은 MongoDB deployment에 연결하는 방법과 연결된 동안 작동하는 방법을 드라이버에 알려주는 문자열입니다.

  • 지원되는 인증 메커니즘을 위한 팩토리 메서드로, MongoCredential 클래스에 포함되어 있습니다.

일반 보안 서비스 API(GSSAPI) 인증 메커니즘을 통해 사용자는 사용자의 주체 이름을 사용하여 Kerberos 서비스를 인증할 수 있습니다.

다음 예에서는 다음 자리 표시자를 사용하여 인증 메커니즘을 지정합니다.

Connection String 또는 MongoCredential 탭을 선택하여 GSSAPI/Kerberos 인증 메커니즘을 지정하는 데 해당하는 구문을 확인합니다.

var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authMechanism=GSSAPI");
var credential = MongoCredential.CreateGssapiCredential("<username>", "<password>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

비밀번호 생략

다음 중 하나에 해당하는 경우 비밀번호를 생략할 수 있습니다.

  • Windows에서 애플리케이션을 실행하는 프로세스 소유자는 인증이 필요한 사용자와 동일합니다.

  • Linux에서 사용자가 kinit username@REALM.COM 을(를) 통해 키탭을 초기화했습니다.

연결 문자열을 사용하거나 MongoCredential 클래스의 팩토리 메서드를 사용하여 인증 메커니즘에 추가 속성을 지정할 수 있습니다.

다음 예는 DNS 서버를 사용하여 호스트의 정규화된 도메인 이름을 검색하는 방법을 보여 줍니다.

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=CANONICALIZE_HOSTNAME:true");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_passwordpassword>");
credential = credential.WithMechanismProperty("CANONICALIZE_HOST_NAME", "true");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

다음 예에서는 사용자의 영역이 서비스의 영역과 다른 경우 사용자의 영역을 지정하는 방법을 보여 줍니다.

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>");
credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

다음 예시에서는 기본 mongodb가 아닌 경우 서비스 이름을 지정하는 방법을 보여줍니다.

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>");
credential = credential.WithMechanismProperty("SERVICE_NAME", "<service name>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

다음 예에서는 여러 인증 메커니즘 속성을 지정하는 방법을 보여 줍니다.

var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>,SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>");
credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>")
.WithMechanismProperty("SERVICE_NAME", "<service name>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

디렉토리 서버 사용자 이름 및 비밀번호를 사용하여 LDAP(Lightweight Directory Access Protocol) 서버에 인증할 수 있습니다.

다음 예에서는 다음 자리 표시자를 사용하여 인증 메커니즘을 지정합니다.

  • <username>: LDAP 사용자 이름

  • <password>: LDAP 비밀번호

  • <hostname>: 클라이언트가 액세스할 수 있는 MongoDB Server의 네트워크 주소

  • <authenticationDb>: 사용자 인증이 포함된 MongoDB database

LDAP 인증 메커니즘을 지정하는 데 해당하는 구문을 보려면 Connection String 또는 MongoCredential 탭을 선택하세요.

var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authSource=<authenticationDb>&authMechanism=PLAIN");
var credential = MongoCredential.CreatePlainCredential("<authenticationDb>", "<username>", "<password>");
var settings = MongoClientSettings.FromConnectionString("<connection string>");
settings.Credential = credential;
var mongoClient = new MongoClient(settings);

이 메서드는 RFC-4616에 정의된 PLAIN 간이 인증 및 보안 계층 서비스(SASL)를 사용하여 인증하므로 LDAP 대신 PLAIN을 참조합니다.

중요

MONGODB-OIDC 인증 메커니즘을 사용하려면 Linux 플랫폼에서 실행되는 MongoDB Server v7.0 이상이 필요합니다.

다음 섹션에서는 MONGODB-OIDC 인증 메커니즘 을 사용하여 다양한 플랫폼에서 인증하는 방법을 설명합니다.

MONGODB-OIDC 인증 메커니즘에 대한 자세한 내용은 MongoDB Server 매뉴얼의 OpenID Connect 인증MongoDB Server 매개변수 를 참조하세요.

애플리케이션이 Azure VM에서 실행되거나 Azure 인스턴스 메타데이터 서비스 를 사용하는 경우 (IMDS)를 사용하는 경우 .NET/C# 드라이버의 기본 제공 Azure 지원을 사용하여 MongoDB에 인증할 수 있습니다.

Azure MongoClientSettings 객체 MongoCredential 를 사용하거나 연결 의 string 일부로 객체 에 IMDS OIDC 인증 을 지정할 수 있습니다. Connection String 또는 MongoCredential 탭 을 선택하여 해당 구문을 확인합니다.

다음 코드 예시 에서는 Azure IMDS OIDC 인증 을 지정하는 방법을 보여줍니다. <percent-encoded audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 매개변수의 퍼센트 인코딩된 값으로 바꿉니다.

쉼표(,) 문자가 포함된 값은 authMechanismProperties 옵션에 전달할 수 없습니다. MongoCredential 탭 에 표시된 대로 MongoCredential 객체 에 쉼표가 포함된 값을 지정해야 합니다.

var connectionString = "mongodb://<db_username>@<hostname>[:<port>]/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");
var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString);
var client = new MongoClient(mongoClientSettings);

다음 코드 예시 에서는 Azure IMDS OIDC 인증 을 지정하는 방법을 보여줍니다. <db_username> 자리 표시자를 Azure managed ID 또는 엔터프라이즈 애플리케이션 의 클라이언트 ID 또는 애플리케이션 ID 로 바꿉니다. <audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

var mongoClientSettings = MongoClientSettings.FromConnectionString(
"mongodb+srv://<hostname>[:<port>]");
mongoClientSettings.Credential = MongoCredential.CreateOidcCredential("azure", "<db_username>")
.WithMechanismProperty("TOKEN_RESOURCE", "<audience>");
var client = new MongoClient(mongoClientSettings);

애플리케이션 이 Google Compute Engine VM에서 실행되거나 GCP 인스턴스 메타데이터 서비스 를 사용하는 경우 , .NET/ C# 드라이버의 내장 GCP 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.

GCP MongoClientSettings 객체 MongoCredential 를 사용하거나 연결 의 string 일부로 객체 에 IMDS OIDC 인증 을 지정할 수 있습니다. Connection String 또는 MongoCredential 탭 을 선택하여 해당 구문을 확인합니다.

다음 코드 예시 에서는 GCP IMDS OIDC 인증 을 인증 string 의 일부로 지정하는 방법을 보여줍니다. <audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

쉼표(,) 문자가 포함된 값은 authMechanismProperties 옵션에 전달할 수 없습니다. MongoCredential 탭 에 표시된 대로 MongoCredential 객체 에 쉼표가 포함된 값을 지정해야 합니다.

var connectionString = "mongodb://<hostname>[:<port>]/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>");
var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString);
var client = new MongoClient(mongoClientSettings);

다음 코드 예시 에서는 MongoCredential 객체 를 사용하여 GCP IMDS OIDC 인증 을 지정하는 방법을 보여줍니다. <audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

var mongoClientSettings = MongoClientSettings.FromConnectionString(
"mongodb+srv://<hostname>[:<port>]");
mongoClientSettings.Credential = MongoCredential.CreateOidcCredential("gcp")
.WithMechanismProperty("TOKEN_RESOURCE", "<audience>");
var client = new MongoClient(mongoClientSettings);

.NET/ C# 드라이버 는 Azure Functions 및 AKS( Azure Kubernetes Service)를 포함한 모든 플랫폼에 대한 내장 지원 을 제공하지 않습니다. 대신 OIDC를 사용하여 이러한 플랫폼에서 인증하려면 사용자 지정 콜백 을 정의해야 합니다.

먼저 IOidcCallback 인터페이스를 구현하는 클래스를 정의합니다. 이 인터페이스에는 두 가지 메서드가 포함되어 있습니다.

  • GetOidcAccessToken(): 이 메서드는 콜백 메서드에 대한 매개변수를 허용하고 콜백 응답을 반환합니다.

  • GetOidcAccessTokenAsync(): 이 메서드는 이전 메서드의 비동기 버전입니다.

다음 코드는 IOidcCallback 인터페이스의 구현 예시입니다. 이 예시에서 메서드는 로컬 파일 시스템의 "access-token.dat" 파일에서 OIDC 토큰을 조회합니다.

public class MyCallback : IOidcCallback
{
public OidcAccessToken GetOidcAccessToken(
OidcCallbackParameters parameters,
CancellationToken cancellationToken)
{
var accessToken = File.ReadAllText("access-token.dat");
return new(accessToken, expiresIn: null);
}
public async Task<OidcAccessToken> GetOidcAccessTokenAsync(
OidcCallbackParameters parameters,
CancellationToken cancellationToken)
{
var accessToken = await File.ReadAllTextAsync(
"access-token.dat",
cancellationToken)
.ConfigureAwait(false);
return new(accessToken, expiresIn: null);
}
}

사용자 지정 콜백 메서드가 포함된 클래스를 정의한 후 MongoCredential.CreateOidcCredential() 메서드를 호출하고 클래스의 새 인스턴스 를 전달합니다. 다음 코드 예시 와 같이 이 메서드 호출의 결과를 MongoClientSettings 객체 의 Credential 속성 에 저장합니다.

var mongoClientSettings = MongoClientSettings.FromConnectionString("mongodb://<hostname>[:port]");
mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new MyCallback());
var client = new MongoClient(mongoClientSettings);

이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

인증 메커니즘.