Docs Menu
Docs Home
/ /
/ / /

Kerberos (GSSAPI) 인증

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

참고

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

이 페이지의 코드 예제에서는 다음 자리 표시자를 사용합니다.

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

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

  • port - MongoDB Server의 포트 번호

연결 문자열 사용하여 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

중요

다음 GSSAPI 속성은 MongoCredential을 통해서만 지정할 수 있습니다.

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

다음 예시 추가 속성을 지정하는 방법을 보여 줍니다.

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 클래스에 정의된 속성 이름 상수를 사용합니다.

다음 예시 GSSAPI와 SERVICE_NAME_KEY를 사용하는 MongoCredential 를 인스턴스화합니다.

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")

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

프로세스 별로 Kerberos 티켓을 캐시하려면 JAVA_SUBJECT_PROVIDER 메커니즘 속성을 지정하고 MongoCredential 인스턴스에 KerberosSubjectProvider 를 제공해야 합니다. 프로세스 별로 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는 GSSAPI를 구현 때 SSPI 대신 LSA를 사용하여 Windows Active Directory와의 상호 운용성을 제한하고 싱글 사인온을 구현합니다. 자세한 내용은 다음 문서를 참조하세요.

돌아가기

LDAP(일반)

이 페이지의 내용