개요
일반 보안 서비스 API (GSSAPI) 인증 메커니즘 사용하면 Kerberos 주체 이름을 지정하여 Kerberos 서비스에 인증할 수 있습니다.
참고
용어
페이지는 인증 메커니즘을 참조할 때 GSSAPI 을 사용하고 기본 프로토콜 또는 서비스를 참조할 때 Kerberos 을 사용합니다. 드라이버는 Kerberos 프로토콜 위에 구축된 GSSAPI RFC-4752 SASL 메커니즘을 사용하여 인증합니다.
Kerberos 인증 지정
다음 섹션에는 다음 자리 표시자 값을 사용하는 코드 예시가 포함되어 있습니다.
<username>:"username%40REALM.ME"와 같은 URL 인코딩된 주체 이름<hostname>: 클라이언트 가 액세스할 수 있는 MongoDB deployment 의 네트워크 주소<port>: MongoDB deployment 의 포트 번호
이 인증 메커니즘 지정에 대한 지침과 예제 코드를 보려면 아래 Connection String 또는 MongoCredential 탭을 선택하세요.
다음 예시 에서는 연결 string 을 사용하여 GSSAPI를 인증합니다.
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
MongoCredential 클래스를 사용하여 GSSAPI 인증 메커니즘 을 지정하려면 다음 예시 와 같이 createGSSAPICredential() 메서드를 호출합니다.
MongoCredential credential = MongoCredential.createGSSAPICredential("<username>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kerberos 티켓 획득
Kerberos 티켓을 획득하려면 GSSAPI Java 라이브러리에서 영역 및 KDC(키 배포 센터) JVM 시스템 속성을 지정해야 합니다. 다음 예시에서는 이러한 속성을 설정하는 방법을 보여 줍니다.
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
추가 속성 설정
Kerberos 설정에 따라 다음 추가 인증 메커니즘 속성 중 하나 이상을 지정해야 할 수도 있습니다:
SERVICE_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
이러한 속성 지정에 대한 지침과 샘플 코드를 보려면 아래의 Connection String 또는 MongoCredential 탭을 선택하세요.
GSSAPI 추가 속성을 지정하려면 연결 문자열에 <PROPERTY_NAME>:<value> 형식의 URL 매개 변수로 속성을 포함합니다.
다음 예시는 GSSAPI를 인증하고 SERVICE_NAME 속성을 지정합니다.
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
중요
MongoCredential 인스턴스에서만 다음 GSSAPI 속성을 지정할 수 있습니다.
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
이러한 속성을 지정하는 방법을 학습 보려면 MongoCredential 탭 을 선택합니다.
GSSAPI 추가 속성을 지정하려면 MongoCredential 인스턴스 에서 withMechanismProperty() 메서드를 호출하고 속성 이름과 값을 매개 변수로 전달합니다. MongoCredential 클래스에 정의된 속성 이름 상수를 사용합니다.
다음 예시에서는 GSSAPI를 인증하고 SERVICE_NAME_KEY 상수를 지정합니다.
MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");
JAVA_SUBJECT_KEY 속성에는 javax.security.auth.Subject 객체가 필요합니다. Subject를 조회하려면 먼저 LoginContext를 사용하여 Java 인증 및 권한 부여 서비스(JAAS)를 통해 인증해야 합니다. 다음 예시에서는 이 구성을 볼 수 있습니다.
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>); loginContext.login(); Subject subject = loginContext.getSubject(); MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
티켓 캐싱 구성
기본적으로 Java Reactive Streams 드라이버는 Kerberos 티켓을 생성한 MongoClient 인스턴스로 캐시합니다. 배포서버에서 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 */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); /* Login context defaults to "com.sun.security.jgss.krb5.initiate" if unspecified in KerberosSubjectProvider */ credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY, new KerberosSubjectProvider(myLoginContext));
참고
Windows에서 Oracle의 JRE는 GSSAPI 구현에서 SSPI(Security Support Provider Interface) 대신 LSA(Local Security Authority) 를 사용합니다. 이로 인해 Windows Active Directory 및 단일 사인온 구현과의 상호 운영성이 제한됩니다. 자세히 알아보려면 다음 리소스를 참조하세요.
추가 정보
MongoDB 인증에 대해 자세히 학습 MongoDB Server 매뉴얼에서 인증을 참조하세요.
Java Reactive Streams 드라이버를 사용하여 MongoClient 객체를 만드는 방법에 대해 자세히 알아보려면 MongoDB 연결 가이드를 참조하세요.
API 문서
이 가이드 에 언급된 클래스 및 메서드에 학습 보려면 다음 API 설명서를 참조하세요.