개요
일반 보안 서비스 API (GSSAPI
) 인증 메커니즘 사용하면 Kerberos 주체 이름을 지정하여 Kerberos 서비스에 인증할 수 있습니다.
참고
이 페이지는 운전자 GSSAPI RFC-4652 SASL 메커니즘을 사용하여 인증하기 때문에 Kerberos
대신 GSSAPI
인증 메커니즘 참조합니다.
Kerberos 인증 지정
이 섹션의 예에서는 GSSAPI
인증 메커니즘 지정하고 다음 자리 표시자 값을 사용하는 방법을 보여 줍니다.
<Kerberos principal>
: URL 로 인코딩된 주체 이름입니다.<hostname>
: 클라이언트 가 액세스할 수 있는 MongoDB deployment 서버의 네트워크 주소 입니다.<port>
: MongoDB deployment 의 포트 번호입니다. 이 매개 변수를 생략하면 운전자 기본값 포트 번호(27017
)를 사용합니다.
이 인증 메커니즘 지정하기 위한 지침과 샘플 코드를 보려면 아래의 Connection String 또는 MongoCredential 탭 선택하세요.
연결 문자열 에 GSSAPI 인증 메커니즘 지정하려면 다음 작업을 수행합니다.
authMechanism
URL 매개변수를GSSAPI
(으)로 설정합니다.(선택 사항)
authSource
URL 매개변수를$external
(으)로 설정합니다.
참고
GSSAPI
메커니즘을 지정하는 경우 $external
이외의 값에 authSource
를 할당할 수 없습니다.
다음 예시 연결 문자열 에 인증 메커니즘 지정합니다.
val connectionString = ConnectionString("<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI") val mongoClient = MongoClient.create(connectionString)
MongoCredential
클래스를 사용하여 GSSAPI 인증 메커니즘 지정하려면 다음 예시 와 같이 createGSSAPICredential()
메서드를 사용합니다.
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 티켓 획득
Kerberos 티켓 획득하려면 GSSAPI Java 라이브러리에서 영역 및 KDC(키 배포 센터) 시스템 속성을 지정해야 합니다.
다음 코드는 이러한 속성에 대한 샘플 값을 보여줍니다.
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
additionalProperties
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
인증 메커니즘 사용해야 합니다. 지침을 보려면 MongoCredential 탭 선택합니다.
JAVA_SUBJECT_PROVIDER
프로세스 MongoCredential
별로 Kerberos 티켓을 캐시 하려면 메커니즘 속성 지정하고 인스턴스 에 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) )
추가 정보
MongoDB 인증에 대해 자세히 학습 MongoDB Server 매뉴얼에서 인증을 참조하세요.
코틀린 동기 (Kotlin Sync) 운전자 사용하여 MongoClient
객체 만드는 방법에 대해 자세히 학습 MongoClient 만들기 가이드 참조하세요.
API 문서
코틀린 동기 (Kotlin Sync) 운전자 사용하여 애플리케이션 인증하는 클래스 및 메서드에 대해 자세히 학습 다음 API 문서를 참조하세요.