개요
일반 보안 서비스 API (GSSAPI) 인증 메커니즘 사용하면 사용자가 사용자의 주체 이름을 사용하여 Kerberos 서비스에 인증할 수 있습니다.
참고
드라이버 GSSAPI RFC-4652 SASL 메커니즘을 사용하여 인증하기 때문에 이 메서드는 Kerberos 대신 GSSAPI 인증 메커니즘 참조합니다.
코드 자리 표시자
이 페이지의 코드 예제에서는 다음 자리 표시자를 사용합니다.
Kerberos principal- URL로 인코딩된 주체 이름(예: "username%40REALM.ME"hostname- 클라이언트가 액세스할 수 있는 MongoDB Server의 네트워크 주소port- MongoDB Server의 포트 번호
GSSAPI로 인증
연결 문자열 사용하여 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_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
중요
다음 GSSAPI 속성은 MongoCredential을 통해서만 지정할 수 있습니다.
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_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) )