인증
이 페이지의 내용
이 드라이버는 MongoDB Enterprise Edition에서만 사용할 수 있는 메커니즘을 포함하여 모든 MongoDB 인증 메커니즘을 지원합니다.
MongoCredential
다음 가져오기 문을 포함합니다.
import org.mongodb.scala._ import scala.collection.JavaConverters._
인증 자격 증명은 MongoCredential
클래스의 인스턴스로 표시됩니다. MongoCredential
클래스에는 지원되는 각 인증 메커니즘에 대한 헬퍼 메서드가 포함되어 있습니다.
기본 인증 메커니즘
MongoDB 3.0 에서는 MongoDB는 기본 인증 메커니즘을 MONGODB-CR
에서 SCRAM-SHA-1
로 변경했습니다. MongoDB 4.0 에서는 더 이상 사용되지 않는 MONGODB-CR
메커니즘에 대한 지원이 제거되고 SCRAM-SHA-256
지원이 추가되었습니다.
서버 버전에 관계없이 기본 인증 메커니즘을 사용하여 인증하는 자격 증명을 만들려면 createCredential()
헬퍼 메서드를 사용하여 자격 증명을 만듭니다.
val user: String = ... // the user name val source: String = ... // the source where the user is defined val password: Array[Char] = ... // the password as a character array // ... val credential = MongoCredential.createCredential(user, source, password) val mongoClient: MongoClient = MongoClient( MongoClientSettings.builder() .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(new ServerAddress("host1", 27017)).asJava)) .credential(credential) .build())
또는 인증 메커니즘을 명시적으로 지정하지 않고 연결 string 을 사용할 수 있습니다.
val mongoClient: MongoClient = MongoClient("mongodb://user1:pwd1@host1/?authSource=db1")
과제 및 응답 메커니즘의 경우, 인증 스키마를 업그레이드한 후에도 기본 인증 메커니즘을 사용하면 MongoDB 2.6 에서 MongoDB 3.0 로 업그레이드하는 것이 더 간단해지기 때문에 권장되는 접근 방식입니다. MongoDB 4.0 사용자의 경우, 메커니즘을 검사하고 올바른 해싱 알고리즘을 사용하므로 기본 인증 메커니즘을 사용하는 것도 권장됩니다.
SCRAM 기반 메커니즘
Salted Challenge-Response 인증 메커니즘(SCRAM
)은 3.0 이후 MongoDB의 기본 인증 메커니즘이었습니다. SCRAM
은 IETF RFC 5802 를 기반으로 합니다. 비밀번호로 사용자를 인증하기 위한 과제-응답 메커니즘 구현에 대한 모범 사례를 정의하는 표준입니다.
MongoDB 3.0 은 SHA-1
해싱 함수를 사용하는 SCRAM-SHA-1
에 대한 지원을 도입했습니다. MongoDB 4.0 은 SHA-256
해싱 함수를 사용하는 SCRAM-SHA-256
에 대한 지원을 도입했습니다.
SCRAM-SHA-256
이 메커니즘을 사용하려면 MongoDB 4.0 및 featureCompatibilityVersion
를 4.0 로 설정해야 합니다.
SCRAM-SHA-256
유형의 자격 증명을 명시적으로 만들려면 createScramSha256Credential()
메서드를 사용합니다.
val user: String = ... // the user name val source: String = ... // the source where the user is defined val password: Array[Char] = ... // the password as a character array // ... val credential = MongoCredential.createScramSha256Credential(user, source, password) val mongoClient: MongoClient = MongoClient( MongoClientSettings.builder() .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(new ServerAddress("host1", 27017)).asJava)) .credential(credential) .build())
또는 authMechanism=SCRAM-SHA-256
를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.
val mongoClient: MongoClient = MongoClient("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-256")
SCRAM-SHA-1
SCRAM-SHA-1
유형의 자격 증명을 명시적으로 만들려면 createScramSha1Credential()
메서드를 사용합니다.
val user: String = ... // the user name val source: String = ... // the source where the user is defined val password: Array[Char] = ... // the password as a character array // ... val credential = MongoCredential.createScramSha1Credential(user, source, password) val mongoClient: MongoClient = MongoClient( MongoClientSettings.builder() .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(new ServerAddress("host1", 27017)).asJava)) .credential(credential) .build())
또는 authMechanism=SCRAM-SHA-1
를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.
val mongoClient: MongoClient = MongoClient("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=SCRAM-SHA-1")
MONGODB-CR
중요
버전 4.0부터 MongoDB는 더 이상 사용되지 않는 MongoDB 과제-응답(MONGODB-CR
) 인증 메커니즘에 대한 지원을 제거합니다.
배포에 MONGODB-CR
스키마에 저장된 사용자 자격 증명이 있는 경우 버전 4.0 로 업그레이드하기 전에 SCRAM
기반 메커니즘을 사용하도록 업그레이드해야 합니다.
MONGODB-CR
유형의 자격 증명을 명시적으로 만들려면 createMongCRCredential()
헬퍼 메서드를 사용합니다.
val user: String = ... // the user name val source: String = ... // the source where the user is defined val password: Array[Char] = ... // the password as a character array // ... val credential = MongoCredential.createMongoCRCredential(user, database, password) val mongoClient: MongoClient = MongoClient( MongoClientSettings.builder() .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(new ServerAddress("host1", 27017)).asJava)) .credential(credential) .build())
또는 authMechanism=MONGODB-CR
를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.
val mongoClient: MongoClient = MongoClient("mongodb://user1:pwd1@host1/?authSource=db1&authMechanism=MONGODB-CR")
참고
인증 스키마를 MONGODB-CR
에서 SCRAM
로 업그레이드한 후에는 MONGODB-CR
자격 증명이 인증에 실패합니다.
X.509
X.509
메커니즘을 사용하면 MongoDB는 SSL 협상 중에 제시된 X.509 인증서를 사용하여 이름이 X.509 인증서의 고유 이름에서 파생된 사용자를 인증합니다.
X.509 인증 에는 인증서 유효성 검사 와 함께 SSL 연결을 사용해야 합니다. 이 유형의 자격 증명을 만들려면 createMongoX509Credential()
헬퍼 메서드를 사용합니다.
val user: String = ... // The X.509 certificate derived user name, e.g. "CN=user,OU=OrgUnit,O=myOrg,..." // ... val credential = MongoCredential.createMongoX509Credential(user) val mongoClient: MongoClient = MongoClient( MongoClientSettings.builder() .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(new ServerAddress("host1", 27017)).asJava)) .credential(credential) .build())
또는 authMechanism=MONGODB-X509
를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.
val mongoClient: MongoClient = MongoClient("mongodb://subjectName@host1/?authMechanism=MONGODB-X509&ssl=true")
사용 x를 참조하세요.509 인증서에서 주체 이름을 결정하는 방법에 대한 자세한 내용은 MongoDB Server 매뉴얼의 클라이언트 인증을 위한 인증서 튜토리얼을 참조하세요.
Kerberos(GSSAPI)
MongoDB Enterprise는 Kerberos 서비스를 통한 프록시 인증을 지원합니다. Kerberos(GSSAPI) 유형의 자격 증명을 만들려면 createGSSAPICredential()
헬퍼 메서드를 사용합니다.
val user: String = ... // The Kerberos user name, including the realm, e.g. "user1@MYREALM.ME" // ... val credential = MongoCredential.createGSSAPICredential(user) val mongoClient: MongoClient = MongoClient( MongoClientSettings.builder() .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(new ServerAddress("host1", 27017)).asJava)) .credential(credential) .build())
또는 authMechanism=GSSAPI
를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.
val mongoClient: MongoClient = MongoClient("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
속성을 지정하는 방법을 보여줍니다.
val credentialWithProperty = credential.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "othername")
또는 ConnectionString
내에 SERVICE_NAME
속성을 지정할 수 있습니다.
val uri = "mongodb://username%40MYREALM.com@myserver/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:othername"
LDAP(일반)
MongoDB Enterprise는 LDAP(Lightweight Directory Access Protocol) 서비스를 통해 프록시 인증을 지원합니다. LDAP
유형의 자격 증명을 만들려면 createPlainCredential()
헬퍼 메서드를 사용합니다.
val user: String = ... // The LDAP user name val password: Array[Char] = ... // The LDAP password // ... val credential = MongoCredential.createPlainCredential(user, "$external", password) val mongoClient: MongoClient = MongoClient( MongoClientSettings.builder() .applyToClusterSettings((builder: ClusterSettings.Builder) => builder.hosts(List(new ServerAddress("host1", 27017)).asJava)) .credential(credential) .build())
또는 authMechanism=PLAIN
를 명시적으로 지정하는 연결 string 을 사용할 수 있습니다.
val mongoClient: MongoClient = MongoClient("mongodb://user1@host1/?authSource=$external&authMechanism=PLAIN")
참고
드라이버가 PLAIN
SASL 메커니즘을 사용하여 인증하기 때문에 이 메서드는 LDAP
대신 PLAIN
인증 메커니즘을 참조합니다.