MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Menu Docs
Página inicial do Docs
/ /
Autenticação

Autenticação Kerberos (GSSAPI)

O mecanismo de autenticação da API de serviços de segurança genérica (GSSAPI) permite que você autentique em um serviço Kerberos especificando seu nome principal do Kerberos.

Observação

The page refers to the GSSAPI authentication mechanism instead of Kerberos because the driver authenticates by using the GSSAPI RFC-4652 SASL mechanism.

Os exemplos nesta seção mostram como especificar o mecanismo de autenticação do GSSAPI e utilizar os seguintes valores de espaço reservado:

  • <Kerberos principal>: seu nome principal codificado para URL.

  • <hostname>: O endereço de rede da sua MongoDB deployment, acessível pelo seu cliente.

  • <port>: o número da porta da sua implantação do MongoDB . Se você omitir este parâmetro, o driver utilizará o número de porta padrão (27017).

Selecione a guia Connection String ou MongoCredential abaixo para obter instruções e código de exemplo para especificar este mecanismo de autenticação:

Para especificar o mecanismo de autenticação GSSAPI em sua string de conexão, execute as seguintes ações:

  • Defina o parâmetro de URL authMechanism como GSSAPI

  • (opcional) Configure o parâmetro de URL do authSource para $external

Observação

Se você especificar o mecanismo GSSAPI , não poderá atribuir authSource a nenhum valor diferente de $external.

O exemplo a seguir especifica o mecanismo de autenticação em uma string de conexão:

val connectionString = ConnectionString("<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI")
val mongoClient = MongoClient.create(connectionString)

Para especificar o mecanismo de autenticação GSSAPI usando a classe MongoCredential, use o método createGSSAPICredential() conforme mostrado no exemplo a seguir:

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
val settings = MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
val mongoClient = MongoClient.create(settings)

Para adquirir um ticket Kerberos, as bibliotecas GSSAPI Java exigem que você especifique as propriedades do sistema Realm e Key Distribution Center (KDC).

O seguinte código mostra valores de amostra para estas propriedades:

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

Talvez seja necessário especificar uma ou mais das seguintes propriedades adicionais do mecanismo MongoCredential , dependendo da configuração do Kerberos:

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Importante

Você só pode especificar as seguintes propriedades GSSAPI usando o MongoCredential:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Selecione a guia MongoCredential para ver como especificá-los.

Para especificar uma das propriedades adicionais GSSAPI, inclua-a na string de conexão como um parâmetro de URL utilizando o formato: <PROPERTY_NAME>:<value>.

Seu código para instanciar um MongoClient usando GSSAPI e propriedades adicionais é semelhante ao exemplo a seguir:

val connectionString = ConnectionString("<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService")
val mongoClient = MongoClient.create(connectionString)

Para especificar uma das propriedades adicionais da GSSAPI, chame o método withMechanismProperty() na sua instância do MongoCredential e passe o nome e o valor da propriedade como parâmetros. Use as seguintes constantes de nome de propriedade definidas na classe MongoCredential :

Selecione a abaSERVIÇO_NAME_KEY ou JAVA_SUBJECT_KEY para ver o código de exemplo para instanciar um MongoCredential que usa GSSAPI e a propriedade selecionada:

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")
val loginContext = LoginContext("<LoginModule implementation from JAAS config>")
loginContext.login()
val subject: Subject = loginContext.subject
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject)

Por padrão, o driver Kotlin armazena em cache tíquetes Kerberos por instância MongoClient . Se o seu sistema precisar criar e destruir instâncias MongoClient com frequência, você poderá alterar o comportamento padrão de cache de tíquetes do Kerberos para cache por processo para melhorar o desempenho.

Para armazenar em cache tíquetes Kerberos por processo, você deve usar o mecanismo de autenticação MongoCredential, pois o mecanismo de autenticação de string de conexão não oferece suporte à propriedade de mecanismo JAVA_SUBJECT_PROVIDER. Para visualizar instruções, selecione a guia MongoCredential.

Para armazenar em cache tickets Kerberos por processo, você deve especificar a propriedade de mecanismo JAVA_SUBJECT_PROVIDER e fornecer um KerberosSubjectProvider em sua instância MongoCredential. O código a seguir configura o driver Kotlin para armazenar em cache os tickets Kerberos por processo:

/* 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,
KerberosSubjectProvider(myLoginContext)
)

Observação

No Windows, o JRE da Oracle usa LSA em vez de SSPI em sua implementação do GSSAPI, o que limita a interoperabilidade com o Windows Active Directory e implementações de logon único. Consulte os seguintes artigos para obter mais informações:

Para saber mais sobre autenticação no MongoDB, consulte Autenticação no manual do MongoDB Server .

Para saber mais sobre como criar um objeto MongoClient usando o driver Kotlin Sync, consulte o guia Criar um MongoClient.

Para saber mais sobre as classes e métodos para autenticar seu aplicação com o driver Kotlin Sync, consulte a seguinte documentação da API:

Voltar

LDAP (simples)

Nesta página