문서 메뉴
문서 홈
/ / /
Java Reactive Streams 드라이버
/ /

인증

이 페이지의 내용

  • MongoCredential
  • 기본 인증 메커니즘
  • SCRAM 기반 메커니즘
  • SCRAM-SHA-256
  • SCRAM-SHA-1
  • MONGODB-CR
  • X.509
  • Kerberos(GSSAPI)
  • LDAP(일반)

이 드라이버는 MongoDB Enterprise Edition에서만 사용할 수 있는 메커니즘을 포함하여 모든 MongoDB 인증 메커니즘을 지원합니다.

다음 가져오기 문을 포함합니다.

import com.mongodb.MongoCredential;
import com.mongodb.ConnectionString;
import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;

인증 자격 증명은 MongoCredential 클래스의 인스턴스로 표시됩니다. MongoCredential 클래스에는 지원되는 각 인증 메커니즘에 대한 정적 팩토리 메서드가 포함되어 있습니다.

MongoDB 3.0 에서는 MongoDB는 기본 인증 메커니즘을 MONGODB-CR 에서 SCRAM-SHA-1 로 변경했습니다. MongoDB 4.0 에서는 더 이상 사용되지 않는 MONGODB-CR 메커니즘에 대한 지원이 제거되고 SCRAM- SHA-256 지원이 추가되었습니다.

서버 버전에 관계없이 기본 인증 메커니즘을 사용하여 인증하는 자격 증명을 만들려면 createCredential() 정적 팩토리 메서드를 사용하여 자격 증명을 만듭니다.

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createCredential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

또는 인증 메커니즘을 명시적으로 지정하지 않고 연결 string 을 사용할 수 있습니다.

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1");

과제 및 응답 메커니즘의 경우, 인증 스키마를 업그레이드한 후에도 기본 인증 메커니즘을 사용하면 MongoDB 2.6 에서 MongoDB 3.0 로 업그레이드하는 것이 더 간단해지기 때문에 권장되는 접근 방식입니다. MongoDB 4.0 사용자의 경우, 메커니즘을 검사하고 올바른 해싱 알고리즘을 사용하므로 기본 인증 메커니즘을 사용하는 것도 권장됩니다.

Salted Challenge-Response 인증 메커니즘(SCRAM)은 3.0 이후 MongoDB의 기본 인증 메커니즘이었습니다. SCRAMIETF RFC 5802 를 기반으로 합니다. 비밀번호로 사용자를 인증하기 위한 과제-응답 메커니즘 구현에 대한 모범 사례를 정의하는 표준입니다.

MongoDB 3.0 은 SHA-1 해싱 함수를 사용하는 SCRAM-SHA-1 에 대한 지원을 도입했습니다. MongoDB 4.0 은 SHA-256 해싱 함수를 사용하는 SCRAM- SHA-256 에 대한 지원을 도입했습니다.

이 메커니즘을 사용하려면 MongoDB 4.0 및 featureCompatibilityVersion 를 4.0 로 설정해야 합니다.

SCRAM-SHA-256 유형의 자격 증명을 명시적으로 만들려면 createScramSha256Credential() 메서드를 사용합니다.

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createScramSha256Credential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

또는 authMechanism=SCRAM-SHA-256를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-256");

SCRAM-SHA-1 유형의 자격 증명을 명시적으로 만들려면 createScramSha1Credential() 메서드를 사용합니다.

String user; // the user name
String source; // the source where the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createScramSha1Credential(user, source, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

또는 authMechanism=SCRAM-SHA-1를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-1");

중요

버전 4.0부터 MongoDB는 더 이상 사용되지 않는 MongoDB 과제-응답(MONGODB-CR) 인증 메커니즘에 대한 지원을 제거합니다.

배포에 MONGODB-CR 스키마에 저장된 사용자 자격 증명이 있는 경우 버전 4.0 로 업그레이드하기 전에 SCRAM기반 메커니즘을 사용하도록 업그레이드해야 합니다.

MONGODB-CR 유형의 자격 증명을 명시적으로 만들려면 createMongCRCredential() 정적 팩토리 메서드를 사용합니다.

String user; // the user name
String database; // the name of the database in which the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createMongoCRCredential(user, database, password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

또는 authMechanism=MONGODB-CR를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.

MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=MONGODB-CR");

참고

인증 스키마를 MONGODB-CR 에서 SCRAM 로 업그레이드한 후에는 MONGODB-CR 자격 증명이 인증에 실패합니다.

X.509 메커니즘을 사용하면 MongoDB는 SSL 협상 중에 제시된 X.509 인증서를 사용하여 이름이 X.509 인증서의 고유 이름에서 파생된 사용자를 인증합니다.

X.509 인증에는 인증서 유효성 검사와 함께 SSL 연결을 사용해야 합니다. 이 유형의 자격 증명을 만들려면 createMongoX509Credential() 정적 팩토리 메서드를 사용합니다.

String user; // The X.509 certificate derived user name, e.g. "CN=user,OU=OrgUnit,O=myOrg,..."
// ...
MongoCredential credential = MongoCredential.createMongoX509Credential(user);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

또는 authMechanism=MONGODB-X509를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.

MongoClient mongoClient = MongoClients.create("mongodb://subjectName@host1/?authMechanism=MONGODB-X509&ssl=true");

사용 x를 참조하세요.509 인증서에서 주체 이름을 결정하는 방법에 대한 자세한 내용은 MongoDB Server 매뉴얼의 클라이언트 인증을 위한 인증서 튜토리얼을 참조하세요.

MongoDB Enterprise는 Kerberos 서비스를 통한 프록시 인증을 지원합니다. Kerberos(GSSAPI) 유형의 자격 증명을 만들려면 createGSSAPICredential() 정적 팩토리 메서드를 사용합니다.

String user; // The Kerberos user name, including the realm, e.g. "user1@MYREALM.ME"
// ...
MongoCredential credential = MongoCredential.createGSSAPICredential(user);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

또는 authMechanism=GSSAPI를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.

MongoClient mongoClient = MongoClients.create("mongodb://username%40REALM.ME@host1/?authMechanism=GSSAPI");

참고

드라이버가 GSSAPI SASL 메커니즘을 사용하여 인증하기 때문에 이 메서드는 Kerberos 대신 GSSAPI 인증 메커니즘을 참조합니다.

Kerberos를 사용하여 성공적으로 인증하려면 애플리케이션은 일반적으로 기본 GSSAPI Java 라이브러리가 Kerberos 티켓을 획득할 수 있도록 여러 시스템 속성을 지정해야 합니다.

java.security.krb5.realm=MYREALM.ME
java.security.krb5.kdc=mykdc.myrealm.me

Kerberos 설정에 따라 애플리케이션 코드 내에서 또는 경우에 따라 MongoCredential 인스턴스의 withMechanismProperty() 메서드를 사용하여 추가 속성 사양이 필요할 수 있습니다.

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

다음 코드는 MongoCredential 객체 내에서 SERVICE_NAME 속성을 지정하는 방법을 보여줍니다.

credential = credential.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "othername");

또는 ConnectionString 내에 SERVICE_NAME 속성을 지정할 수 있습니다.

uri = "mongodb://username%40MYREALM.com@myserver/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:othername"

참고

Windows에서 Oracles JRE는 LSA 사용합니다. 대신 SSPI 이는 Windows Active Directory와의 상호 운용성, 특히 싱글 사인온을 구현하는 기능을 제한하는 GSSAPI 구현입니다.

MongoDB Enterprise는 LDAP(Lightweight Directory Access Protocol) 서비스를 통해 프록시 인증을 지원합니다. LDAP 유형의 자격 증명을 만들려면 createPlainCredential() 정적 팩토리 메서드를 사용합니다.

String user; // The LDAP user name
char[] password; // The LDAP password
// ...
MongoCredential credential = MongoCredential.createPlainCredential(user, "$external", password);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.credential(credential)
.build());

또는 authMechanism=PLAIN를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.

MongoClient mongoClient = MongoClients.create("mongodb://user1@host1/?authSource=$external&authMechanism=PLAIN");

참고

드라이버가 PLAIN SASL 메커니즘을 사용하여 인증하기 때문에 이 메서드는 LDAP 대신 PLAIN 인증 메커니즘을 참조합니다.

돌아가기

TLS/SSL

다음

압축