문서 메뉴
문서 홈
/ / /
Kotlin 코루틴
/

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

이 페이지의 내용

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

이 가이드에서는 MongoDB Enterprise Edition에서만 사용할 수 있는 각 인증 메커니즘 을 사용하여 MongoDB로 인증하는 방법을 배울 수 있습니다.

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

  • Kerberos(GSSAPI)

  • LDAP(일반)

  • MONGODB-OIDC

인증 메커니즘 가이드.

MongoDB 클러스터로의 연결 설정에 대한 자세한 내용은 연결 가이드를 참조하세요.

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

  • 연결 문자열

  • MongoCredential 팩토리 메서드

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

연결 문자열을 사용하여 인증하려면 연결 문자열에 설정을 포함하고 MongoClient.create() 메서드에 전달하여 MongoClient 를 인스턴스화합니다. 각 섹션의 Connection String 탭에서는 연결 문자열 을 사용하여 인증하기 위한 구문을 제공합니다.

또는 MongoCredential 클래스를 사용하여 인증 세부 정보를 지정할 수 있습니다. MongoCredential 클래스에는 인증 메커니즘과 자격 증명이 포함된 인스턴스를 구성하는 정적 팩토리 메서드가 포함되어 있습니다. 헬퍼 클래스를 사용하는 경우 MongoCredential 구성 시 클래스를 MongoClientSettings.Builder 사용하여 연결 설정을 구성해야 MongoClient 합니다. 각 섹션의 MongoCredential 탭은 MongoCredential 를 사용하여 인증하기 위한 구문을 제공합니다.

이러한 클래스 및 메서드에 대한 자세한 내용은 다음 API 문서를 참조하세요.

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

참고

드라이버가 GSSAPI RFC-4652 를 사용하여 인증하기 때문에 이 메서드는 대신 GSSAPI 인증 메커니즘을 참조합니다.Kerberos SASL 메커니즘.

다음 코드 스니펫은 다음 자리 표시자를 사용하여 인증 메커니즘을 지정하는 방법을 보여줍니다.

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

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

  • port - MongoDB Server의 포트 번호

이 인증 메커니즘 지정에 대한 지침과 예제 코드를 보려면 아래 Connection String 또는 MongoCredential 탭을 선택하세요.

연결 문자열을 사용하여 GSSAPI 인증 메커니즘을 지정하려면 다음을 수행합니다.

  • authMechanism URL 매개변수를 GSSAPI값에 할당합니다.

  • (선택 사항) authSource URL 매개변수를 $external값에 할당합니다.

참고

GSSAPI 메커니즘을 지정하는 경우 $external 이외의 값에 authSource 를 할당할 수 없습니다.

MongoClient 를 인스턴스화하는 코드는 다음과 유사해야 합니다.

val connectionString = ConnectionString("<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI")
val mongoClient = MongoClient.create(connectionString)

MongoCredential 클래스를 사용하여 GSSAPI 인증 메커니즘을 지정하려면 createGSSAPICredential() 메서드를 사용합니다. MongoClient 를 인스턴스화하는 코드는 다음과 유사해야 합니다.

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
val settings = MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
val mongoClient = MongoClient.create(settings)

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

중요

MongoCredential 을(를) 사용하여 다음과 같은 GSSAPI 속성만 지정할 수 있습니다.

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

지정 방법을 보려면 MongoCredential 탭을 선택합니다.

GSSAPI 추가 속성 중 하나를 지정하려면 <PROPERTY_NAME>:<value> 형식을 사용하여 연결 문자열에 URL 매개 변수로 포함합니다.

GSSAPI 및 추가 속성을 사용하여 MongoClient 를 인스턴스화하는 코드는 다음과 유사할 수 있습니다.

val connectionString = ConnectionString("<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService")
val mongoClient = MongoClient.create(connectionString)

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

SERVICE_NAME_KEY 또는 JAVA_SUBJECT_KEY 탭을 선택하여 GSSAPI 및 선택한 속성을 사용하는 MongoCredential 를 인스턴스화하는 샘플 코드를 확인합니다.

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")
val loginContext = LoginContext("<LoginModule implementation from JAAS config>")
loginContext.login()
val subject: Subject = loginContext.subject
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject)

기본적으로 Kotlin 드라이버는 MongoClient 인스턴스별로 Kerberos 티켓을 캐시합니다. 배포서버에서 MongoClient 인스턴스를 자주 생성하고 폐기해야 하는 경우, 기본 Kerberos 티켓 캐싱 동작을 프로세스별로 캐시하도록 변경하여 성능을 개선할 수 있습니다.

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

프로세스별로 Kerberos JAVA_SUBJECT_PROVIDER 티켓을 캐시하려면 메커니즘 속성을 지정하고 KerberosSubjectProvider 를 제공해야 MongoCredential 합니다. 인스턴스에서. 프로세스별로 Kerberos 티켓을 캐시하도록 Kotlin 드라이버를 구성하는 코드는 다음과 유사해야 합니다.

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

참고

Windows에서 Oracle의 JRE는 LSA 를 사용합니다.대신 SSPI Windows Active Directory와의 상호 운용성 및 싱글 사인온 구현을 제한하는 GSSAPI 구현. 자세한 내용은 다음 문서를 참조하세요.

MongoDB Enterprise Edition 3.4 이상에서 사용할 수 있습니다.

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

인증 메커니즘의 이름 PLAINLDAP RFC- 에 정의된 PLAIN 단순 인증 및 보안 계층(SASL) 을4616 사용하여 인증하기 때문에 대신 로 지정됩니다. .

매개 authMechanism 변수를 로 설정하고 PLAIN LDAP 연결 string 에 사용자이름 및 비밀번호를 포함하여 이 인증 메커니즘을 지정할 수 있습니다.

다음 코드 스니펫은 다음 자리 표시자를 사용하여 인증 메커니즘을 지정하는 방법을 보여줍니다.

  • LDAP username - LDAP 사용자 이름

  • password - LDAP 사용자의 비밀번호

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

  • port - MongoDB Server의 포트 번호

이 인증 메커니즘 지정에 대한 지침과 예제 코드를 보려면 아래 Connection String 또는 MongoCredential 탭을 선택하세요.

연결 문자열을 사용하여 LDAP(일반) 인증 메커니즘을 지정하려면 다음을 수행합니다.

  • authMechanism URL 매개변수를 PLAIN값에 할당합니다.

  • (선택 사항) authSource URL 매개변수를 $external값에 할당합니다.

참고

PLAIN 메커니즘을 지정하는 경우 $external 이외의 값에 authSource 를 할당할 수 없습니다.

MongoClient 를 인스턴스화하는 코드는 다음과 유사해야 합니다.

val connectionString = ConnectionString("<LDAP username>:<password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN")
val mongoClient = MongoClient.create(connectionString)

MongoCredential 클래스를 사용하여 LDAP(PLAIN) 인증 메커니즘을 지정하려면 createPlainCredential() 메서드를 사용합니다. MongoClient 를 인스턴스화하는 코드는 다음과 유사해야 합니다.

val credential = MongoCredential.createPlainCredential("<LDAP username>", "$external", "<password>".toCharArray())
val settings = MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
val mongoClient = MongoClient.create(settings)

중요

MONGODB-OIDC 인증 메커니즘에는 MongoDB 서버 v7 가 필요합니다. Linux 플랫폼에서 실행되는 0 이상.

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

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

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

MongoCredential 인스턴스를 사용하거나 연결 문자열에 자격 증명을 지정하여 Azure IMDS OIDC 인증을 지정할 수 있습니다.

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

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

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

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

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

val credential = MongoCredential.createOidcCredential("<OIDC principal>")
.withMechanismProperty("ENVIRONMENT", "azure")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>")
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build())

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

MongoCredential 인스턴스를 사용하거나 연결 문자열에 자격 증명을 지정하여 GCP IMDS OIDC 인증을 지정할 수 있습니다.

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

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

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

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

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

val credential = MongoCredential.createOidcCredential("<OIDC principal>")
.withMechanismProperty("ENVIRONMENT", "gcp")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>")
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build())

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

val credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK") { context: Context ->
val accessToken = "..."
OidcCallbackResult(accessToken)
}

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

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

val credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK") { context: Context ->
val accessToken = String(Files.readAllBytes(Paths.get("access-token.dat")))
OidcCallbackResult(accessToken)
}
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
)

돌아가기

인증 메커니즘.

다음

Stable API