Docs Menu
Docs Home
/ / /
Java Reactive Streams 드라이버
/

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

이 페이지의 내용

  • 개요
  • 인증 메커니즘 지정
  • 메커니즘
  • Kerberos(GSSAPI)
  • LDAP(일반)
  • MONGODB-OIDC

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 를 사용하여 인증하는 구문을 볼 수 있습니다.

일반 보안 서비스 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 티켓을 캐시 하려면 메커니즘 속성 을 지정하고 KerberosSubjectProvider 를 MongoCredential 제공합니다. 다음 예시 와 같이 인스턴스 에서

/* 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는 LSA 사용합니다. 대신 SSPI Windows Active Directory와의 상호 운용성 및 싱글 사인온 구현 을 제한하는 GSSAPI 구현. 자세한 내용은 다음 리소스를 참조하세요.

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

인증 메커니즘의 이름 PLAINLDAP RFC- 에 정의된 PLAIN 단순 인증 및 보안 계층(SASL) 을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에서 실행되거나 Azure 인스턴스 메타데이터 서비스 를 사용하는 경우 (IMDS), 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());

돌아가기

인증