Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Java Reactive Streams 드라이버
/

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

MongoDB Enterprise 에는 MongoDB Community Edition 에서는 사용할 수 없는 인증 메커니즘이 포함되어 있습니다. 이 가이드 에서는 이러한 인증 메커니즘을 사용하여 MongoDB 에 인증하는 방법을 학습 수 있습니다. MongoDB 에서 사용할 수 있는 다른 인증 메커니즘에 학습 보려면 인증 메커니즘 가이드 를 참조하세요.

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

  • 연결 문자열

  • MongoCredential 팩토리 메서드

연결 문자열 (또는 연결 URL)은 MongoDB 클러스터에 연결하고 인증하는 방법을 지정합니다.

연결 string 을 사용하여 인증하려면 연결 string 에 설정을 포함한 다음 MongoClients.create() 메서드에 전달하여 MongoClient를 인스턴스화합니다. 다음 섹션에서 Connection String 탭 을 선택하여 연결 string 을 사용하여 인증하는 구문을 확인합니다.

MongoCredential 클래스를 사용하여 인증 세부 정보를 지정할 수도 있습니다. MongoCredential 클래스에는 인증 메커니즘 과 자격 증명 이 포함된 인스턴스를 구성하는 정적 팩토리 메서드가 포함되어 있습니다. MongoCredential 헬퍼 클래스를 사용하는 경우 MongoClientSettings.Builder 클래스를 사용하여 연결 설정을 구성합니다. 다음 섹션에서 MongoCredential 탭 을 선택하면 MongoCredential 를 사용하여 인증하는 구문을 볼 수 있습니다.

중요

Java Reactive Streams 운전자 UnixServerAddress 객체 또는 도메인 소켓 연결을 지원 하지 않습니다. 도메인 소켓을 사용하여 연결하려면 Java Sync 운전자 사용합니다. 그렇지 않으면 ServerAddress 객체 사용하여 Java Reactive Streams 운전자 에서 연결합니다.

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

다음 섹션에는 다음 자리 표시자를 사용하는 코드 예시가 포함되어 있습니다.

  • username: URL로 인코딩된 주체 이름(예: "username%40REALM.ME"

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

  • port: MongoDB 배포서버의 포트 번호

Connection String 또는 MongoCredential 탭을 선택하여 해당 구문을 확인합니다.

다음 예시 에서는 연결 string 을 사용하여 GSSAPI를 인증합니다.

MongoClient mongoClient = MongoClients
.create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");

MongoCredential 클래스를 사용하여 GSSAPI 인증 메커니즘 을 지정하려면 다음 예시 와 같이 createGSSAPICredential() 메서드를 호출합니다.

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

Kerberos 티켓 획득하려면 GSSAPI Java 라이브러리에서 영역 및 KDC(키 배포 센터) 시스템 속성을 지정해야 합니다. 다음 예시 와 같이 이러한 설정을 설정하다 수 있습니다.

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

Kerberos 설정 에 따라 다음과 같은 추가 MongoCredential 메커니즘 속성 중 하나 이상을 지정해야 할 수도 있습니다.

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

중요

다음 GSSAPI 속성은 MongoCredential 클래스를 통해서만 지정할 수 있습니다.

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

이러한 속성을 지정하는 방법을 학습 보려면 MongoCredential 탭 을 선택합니다.

GSSAPI 추가 속성을 지정하려면 연결 string 에 속성 을 <PROPERTY_NAME>:<value> 형식의 URL 매개 변수로 포함합니다.

다음 예시 에서는 GSSAPI를 인증하고 추가 속성을 지정합니다.

MongoClient mongoClient = MongoClients
.create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");

GSSAPI 추가 속성을 지정하려면 MongoCredential 인스턴스 에서 withMechanismProperty() 메서드를 호출하고 속성 이름과 값을 매개 변수로 전달합니다. MongoCredential 클래스에 정의된 속성 이름 상수를 사용합니다.

SERVICE_NAME_KEY 또는 JAVA_SUBJECT_KEY 탭 을 선택하여 해당 속성 을 지정하는 방법을 확인합니다.

MongoCredential credential = MongoCredential
.createGSSAPICredential("<username>");
credential = credential
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>);
loginContext.login();
Subject subject = loginContext.getSubject();
MongoCredential credential = MongoCredential
.createGSSAPICredential("<username>");
credential = credential
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);

기본값 Java Reactive Streams 운전자 는 MongoClient 인스턴스 별로 Kerberos 티켓을 캐시합니다. 배포서버 에서 MongoClient 인스턴스를 자주 생성하고 삭제하는 경우 기본값 Kerberos 티켓 캐싱 동작을 프로세스 별 캐시 로 변경하여 성능을 개선할 수 있습니다.

프로세스 별로 Kerberos 티켓을 캐시 하려면 연결 string 인증 메커니즘 이 JAVA_SUBJECT_PROVIDER 메커니즘 속성 을 지원 하지 않으므로 MongoCredential 인증 메커니즘 을 사용해야 합니다. MongoCredential 탭 을 선택하여 프로세스 별로 Kerberos 티켓을 캐시 하는 방법을 학습 보세요.

프로세스 JAVA_SUBJECT_PROVIDER 별로 Kerberos 티켓을 캐시 하려면 MongoCredential 다음 예시 와 같이 메커니즘 속성 지정하고 인스턴스 에 KerberosSubjectProvider를 제공합니다.

/* All MongoClient instances sharing this instance of KerberosSubjectProvider
will share a Kerberos ticket cache */
String myLoginContext = "myContext";
MongoCredential credential = MongoCredential
.createGSSAPICredential(<username>);
/* Login context defaults to "com.sun.security.jgss.krb5.initiate"
if unspecified in KerberosSubjectProvider */
credential = credential
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY,
new KerberosSubjectProvider(myLoginContext));

참고

Windows 에서 Oracle의 JRE는 GSSAPI를 구현 때 SSPI 대신 LSA를 사용하므로 Windows Active Directory와의 상호 운용성 및 싱글 사인온 구현이 제한됩니다. 자세한 내용은 다음 리소스를 참조하세요.

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

인증 메커니즘 이름은 PLAIN RFC- LDAP정의된 PLAIN SASL(Simple Authentication and Security Layer)을4616 사용하여 인증하므로 대신 로 명명됩니다.

다음 섹션에는 다음 자리 표시자를 사용하는 코드 예시가 포함되어 있습니다.

  • ldap_username: LDAP 사용자 이름

  • ldap_password: LDAP 사용자의 비밀번호

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

  • port: MongoDB 배포서버의 포트 번호

Connection String 또는 MongoCredential 탭을 선택하여 해당 구문을 확인합니다.

MongoClient mongoClient = MongoClients
.create("<ldap_username>:<ldap_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");

MongoCredential 클래스를 사용하여 LDAP (PLAIN) 인증 메커니즘 을 지정하려면 다음 예시 와 같이 createPlainCredential() 메서드를 호출합니다.

MongoCredential credential = MongoCredential
.createPlainCredential(<ldap_username>, "$external", <ldap_password>);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

중요

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

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

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

애플리케이션 이 Azure VM에서 실행되거나 IMDS(Azure 인스턴스 메타데이터 서비스)를 사용하는 경우, Java Reactive Streams 드라이버의 내장 Azure 지원 사용하여 MongoDB 에 인증할 수 있습니다.

를 Azure 사용하거나 MongoCredential 연결 의 일부로 IMDS OIDC 인증 을 지정할 수 있습니다.string

Connection String 또는 MongoCredential 탭을 선택하여 해당 구문을 확인합니다.

<username> 자리 표시자를 Azure managed ID 또는 엔터프라이즈 애플리케이션 의 클라이언트 ID 또는 애플리케이션 ID 로 바꿉니다. 다음 코드의 <percent-encoded audience> 자리 표시자를 MongoDB deployment 에 구성된 대상 서버 매개변수의 백분율 인코딩 값으로 바꿉니다.

쉼표(,) 문자와 해당 인코딩(%2C)은 예약되어 있으며, 이러한 문자를 값에 사용하면 운전자 가 쉼표를 키-값 쌍의 구분 기호로 해석합니다. MongoCredential 탭 에 표시된 대로 MongoCredential 인스턴스 에 쉼표가 포함된 값을 지정해야 합니다.

MongoClient mongoClient = MongoClients.create(
"mongodb://<username>@<hostname>:<port>/?" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");

<username> 자리 표시자를 Azure managed ID 또는 엔터프라이즈 애플리케이션 의 클라이언트 ID 또는 애플리케이션 ID 로 바꿉니다. <audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 서버 매개변수의 값으로 바꿉니다.

MongoCredential credential = MongoCredential.createOidcCredential("<username>")
.withMechanismProperty("ENVIRONMENT", "azure")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

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

를 GCP 사용하거나 MongoCredential 연결 의 일부로 IMDS OIDC 인증 을 지정할 수 있습니다.string

다음 섹션에는 다음 자리 표시자를 사용하는 코드 예시가 포함되어 있습니다.

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

  • port: MongoDB 배포서버의 포트 번호

Connection String 또는 MongoCredential 탭을 선택하여 해당 구문을 확인합니다.

다음 코드의 <percent-encoded audience> 자리 표시자를 MongoDB deployment 에 구성된 오디언스 서버 매개변수의 백분율 인코딩 값으로 바꿉니다.

쉼표(,) 문자와 해당 인코딩(%2C)은 예약되어 있으며, 이러한 문자를 값에 사용하면 운전자 가 쉼표를 키-값 쌍의 구분 기호로 해석합니다. MongoCredential 탭 에 표시된 대로 MongoCredential 인스턴스 에 쉼표가 포함된 값을 지정해야 합니다.

MongoClient mongoClient = MongoClients.create(
"mongodb://<hostname>:<port>/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");

<audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 서버 매개변수의 값으로 바꿉니다.

MongoCredential credential = MongoCredential.createOidcCredential()
.withMechanismProperty("ENVIRONMENT", "gcp")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

Java Reactive Streams 운전자 는 Azure Functions 및 AKS( Azure Kubernetes Service)를 포함한 모든 플랫폼에 대한 내장 지원 을 제공하지 않습니다. 대신 OIDC를 사용하여 이러한 플랫폼에서 인증하려면 사용자 지정 콜백 을 정의해야 합니다. 이렇게 하려면 다음 코드 예시 와 같이 "OIDC_CALLBACK" 인증 속성 을 사용합니다.

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK", (context) -> {
String accessToken = ...
return new OidcCallbackResult(accessToken);
});

"OIDC_CALLBACK" 속성의 값은 Lambda 또는 OidcCallbackContext 를 매개 변수로 허용하고 OidcCallbackResult 를 반환하는 OidcCallback 함수 인터페이스의 기타 구현이어야 합니다.

다음 예제에서는 예제 콜백을 사용하여 로컬 파일 시스템의 "access-token.dat" 파일에서 OIDC 토큰을 검색합니다.

MongoCredential credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK", (context) -> {
string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat"));
return new OidcCallbackResult(accessToken);
});
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

돌아가기

인증

이 페이지의 내용