개요
일반 보안 서비스 API (GSSAPI) 인증 메커니즘 사용하면 Kerberos 주체 이름을 지정하여 Kerberos 서비스에 인증할 수 있습니다.
참고
용어
이 페이지에서는 GSSAPI 인증 메커니즘 참조할 때 를 사용하고 Kerberos 기본 프로토콜 또는 서비스를 참조할 때 를 사용합니다. 운전자 Kerberos 프로토콜 기반으로 구축된 GSSAPI RFC- SASL 메커니즘을 사용하여 인증합니다.4752
Kerberos 인증 지정
다음 섹션에는 다음 자리 표시자 값을 사용하는 코드 예제가 포함되어 있습니다.
<username>:URL 로 인코딩된 주체 이름(예:)"username%40REALM.ME"<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");
중요
다음 GSSAPI 속성은 MongoCredential 인스턴스 에서만 지정할 수 있습니다.
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를 사용하여 JAAS( Java Authentication and Authorization Service)를 통해 인증해야 합니다. 다음 예시 이 구성을 보여줍니다.
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 운전자 티켓을 생성한 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 */ 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(보안 지원 제공자 인터페이스) 대신 LSA(로컬 보안 기관)를 사용합니다. 이로 인해 Windows Active Directory와의 상호 운용성 및 싱글 사인온 구현이 제한됩니다. 자세히 학습 다음 리소스를 참조하세요.
추가 정보
MongoDB 인증에 대해 자세히 학습 MongoDB Server 매뉴얼에서 인증을 참조하세요.
Java Reactive Streams 운전자 사용하여 객체 만드는 방법에 대해 자세히 학습 MongoClient MongoDB 에 연결 가이드 참조하세요.
API 문서
이 가이드 에 언급된 클래스 및 메서드에 학습 보려면 다음 API 설명서를 참조하세요.