개요
일반 보안 서비스 API (GSSAPI) 인증 메커니즘 사용하면 주체 이름을 지정하여 Kerberos 서비스에 인증할 수 있습니다.
참고
용어
페이지는 인증 메커니즘을 참조할 때 GSSAPI 을 사용하고 기본 프로토콜 또는 서비스를 참조할 때 Kerberos 을 사용합니다. 드라이버는 Kerberos 프로토콜 위에 구축된 GSSAPI RFC-4752 SASL 메커니즘을 사용하여 인증합니다.
Kerberos 인증 지정
이 섹션의 예에서는 GSSAPI 인증 메커니즘 지정하고 다음 자리 표시자 값을 사용하는 방법을 보여 줍니다.
<Kerberos principal>: URL 로 인코딩된 주체 이름입니다.<hostname>: 클라이언트 가 액세스할 수 있는 MongoDB deployment 서버의 네트워크 주소 입니다.<port>: MongoDB deployment 의 포트 번호입니다. 이 매개 변수를 생략하면 운전자 기본값 포트 번호(27017)를 사용합니다.
Connection String 또는 MongoCredential 탭 선택하여 지침과 코드 예시 확인합니다.
연결 문자열 에 GSSAPI 인증 메커니즘 지정하려면 다음 작업을 수행합니다.
authMechanismURL 매개변수를GSSAPI(으)로 설정합니다.(선택 사항)
authSourceURL 매개변수를(으)로$external설정합니다.
참고
GSSAPI 메커니즘을 지정하는 경우 $external 이외의 값에 authSource 를 할당할 수 없습니다.
다음 예시 연결 문자열 에 인증 메커니즘 지정합니다.
val mongoClient = MongoClient( "mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI" )
MongoCredential 클래스를 사용하여 GSSAPI 인증 메커니즘 지정하려면 다음 예시 와 같이 createGSSAPICredential() 메서드를 사용합니다.
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") val mongoClient = MongoClient(MongoClientSettings .builder() .applyToClusterSettings(builder => builder.hosts(List(new ServerAddress("<hostname>", <port>)).asJava)) .credential(credential) .build())
Kerberos 티켓 획득
Kerberos 티켓 획득하려면 GSSAPI Java 라이브러리에서 영역 및 KDC(키 배포 센터) 시스템 속성을 지정해야 합니다.
다음 코드는 이러한 속성에 대한 샘플 값을 보여줍니다.
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
additionalProperties
Kerberos 설정에 따라 다음 추가 인증 메커니즘 속성 중 하나 이상을 지정해야 할 수도 있습니다:
SERVICE_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
이러한 속성 지정에 대한 지침과 샘플 코드를 보려면 아래의 Connection String 또는 MongoCredential 탭을 선택하세요.
GSSAPI 추가 속성을 지정하려면 연결 문자열에 <PROPERTY_NAME>:<value> 형식의 URL 매개 변수로 속성을 포함합니다.
다음 예시는 GSSAPI를 인증하고 SERVICE_NAME 속성을 지정합니다.
val mongoClient = MongoClient( "mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService" )
중요
다음 GSSAPI 속성은 MongoCredential을 통해서만 지정할 수 있습니다.
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
지정 방법을 보려면 MongoCredential 탭을 선택합니다.
GSSAPI 추가 속성을 지정하려면 MongoCredential 인스턴스 에서 withMechanismProperty() 메서드를 호출하고 속성 이름과 값을 매개 변수로 전달합니다. MongoCredential 클래스에 정의된 다음 속성 이름 상수를 사용합니다.
다음 예시에서는 GSSAPI를 인증하고 SERVICE_NAME_KEY 상수를 지정합니다.
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")
JAVA_SUBJECT_KEY 속성에는 javax.security.auth.Subject 객체가 필요합니다. Subject를 조회하려면 먼저 LoginContext를 사용하여 Java 인증 및 권한 부여 서비스(JAAS)를 통해 인증해야 합니다. 다음 예시에서는 이 구성을 볼 수 있습니다.
val loginContext = new LoginContext("<LoginModule implementation from JAAS config>") loginContext.login() val subject: Subject = loginContext.getSubject() val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject)
티켓 캐싱
기본값 으로 스칼라 운전자 티켓을 생성한 MongoClient 인스턴스 별로 Kerberos 티켓을 캐시합니다. 배포서버 MongoClient 인스턴스를 자주 생성하고 삭제하는 경우 기본값 Kerberos 티켓 캐싱 동작을 프로세스 별 캐시 로 변경하여 성능을 개선할 수 있습니다.
중요
연결 문자열 인증 메커니즘은 JAVA_SUBJECT_PROVIDER 메커니즘 속성을 지원하지 않으므로 MongoCredential 클래스를 사용하여 기본 캐시 동작을 변경해야 합니다.
프로세스 JAVA_SUBJECT_PROVIDER 별로 Kerberos 티켓을 캐시 하려면 MongoCredential 다음 예시 와 같이 메커니즘 속성 지정하고 인스턴스 에 KerberosSubjectProvider를 제공합니다.
/* 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, new KerberosSubjectProvider(myLoginContext) )
추가 정보
MongoDB 인증에 대해 자세히 학습 MongoDB Server 매뉴얼에서 인증을 참조하세요.
스칼라 운전자 사용하여 객체 만드는 방법에 대해 자세히 학습 MongoClient 만들기 MongoClient 가이드 참조하세요.
API 문서
스칼라 운전자 로 애플리케이션 인증하는 클래스 및 메서드에 대해 자세히 학습 다음 API 문서를 참조하세요.