Menu Docs
Página inicial do Docs
/ / /
Kotlin Coroutine
/

Mecanismos de autenticação empresarial

Nesta página

  • Visão geral
  • Especificar um mecanismo de autenticação
  • Mecanismos
  • Kerberos (GSSAPI)
  • LDAP (simples)
  • MONGODB-OIDC

Neste guia, você aprenderá como autenticar com o MongoDB usando cada mecanismo de autenticação disponível exclusivamente no MongoDB Enterprise Edition.

Você pode usar os seguintes mecanismos com a versão mais recente do MongoDB Enterprise Edition:

  • Kerberos (GSSAPI)

  • LDAP (simples)

  • MONGODB-OIDC

Guia de mecanismos de autenticação.

Para obter mais informações sobre como estabelecer uma conexão com seu cluster MongoDB, leia nosso Guia de Conexão.

Você pode especificar seu mecanismo de autenticação e credenciais ao se conectar ao MongoDB usando um dos seguintes:

  • Uma connection string

  • Um método de fábrica do MongoCredential

Uma string de conexão (também conhecida como uri de conexão) especifica como se conectar e autenticar ao cluster MongoDB.

Para autenticar usando uma string de conexão, inclua suas configurações na string de conexão e passe-a para o método MongoClient.create() para instanciar seu MongoClient. A guia Connection String em cada seção fornece a sintaxe para autenticar utilizando uma cadeia de conexão.

Alternativamente, você pode utilizar a classe MongoCredential para especificar seus detalhes de autenticação. A classe MongoCredential contém métodos de fábrica estáticos que constroem instâncias contendo seu mecanismo de autenticação e credenciais. Quando você usa a classe auxiliar MongoCredential , é necessário usar a classe MongoClientSettings.Builder para definir as configurações de conexão ao construir o MongoClient. A guia MongoCredential em cada seção fornece a sintaxe para autenticar utilizando um MongoCredential.

Para obter mais informações sobre essas classes e métodos, consulte a seguinte documentação da API:

O mecanismo de autenticação da API de Serviços de Segurança Genérica (GSSAPI) permite ao usuário se autenticar em um serviço Kerberos usando o nome principal do usuário.

Observação

O método refere-se ao GSSAPI mecanismo de autenticação em vez de Kerberos porque o driver autentica usando o GSSAPI RFC-4652 Mecanismo SASL.

Os seguintes trechos de código mostram como especificar o mecanismo de autenticação, usando os seguintes placeholders:

  • Kerberos principal - seu nome principal codificado por URL, por exemplo "username%40REALM.ME"

  • hostname - endereço de rede do seu MongoDB Server, acessível pelo seu cliente

  • port - número da porta do seu servidor MongoDB

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

Para especificar o mecanismo de autenticação GSSAPI usando uma cadeia de conexão:

  • Atribuir o parâmetro de URL authMechanism ao valor GSSAPI

  • (opcional) Atribua o parâmetro de URL do authSource ao valor $external

Observação

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

Seu código para instanciar um MongoClient deve ser semelhante ao seguinte:

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() . Seu código para instanciar um MongoClient deve ser semelhante ao seguinte:

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 Java do GSSAPI exigem que você especifique as propriedades do sistema realm e Key Administration Center (KDC). Consulte as configurações de amostra no exemplo a seguir:

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 utilizando 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 da GSSAPI, inclua-a na string de conexão como um parâmetro de URL usando o formato: <PROPERTY_NAME>:<value>.

Seu código para instanciar um MongoClient utilizando GSSAPI e propriedades adicionais pode se assemelhar ao seguinte:

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 constantes de nome da 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 tickets Kerberos em cache 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. Se você quiser armazenar tíquetes Kerberos em cache por processo, selecione a guia MongoCredential para saber como fazer isso.

Para armazenar tíquetes Kerberos em cache por processo, você deve especificar a JAVA_SUBJECT_PROVIDER propriedade do mecanismo e fornecer um KerberosSubjectProvider na sua MongoCredential instância do . O código para configurar o driver Kotlin para armazenar em cache os tickets Kerberos por processo deve ser semelhante ao seguinte:

/* 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 SSDI em sua implementação de GSSAPI, que limita a interoperabilidade com o Windows Active Directory e implementações de logon único. Consulte os seguintes artigos para obter mais informações:

Disponível no MongoDB Enterprise Edition 3.4 e posterior.

Você pode autenticar em um servidor LDAP (Lightweight Directory Access Protocol) usando seu nome de usuário e senha do servidor de diretórios.

Dica

O mecanismo de autenticação é nomeado PLAIN em vez de LDAP , pois autentica usando a camada simples de autenticação e segurança PLAIN (SASL) definida em RFC-4616.

Você pode especificar este mecanismo de autenticação configurando o parâmetro authMechanism para PLAIN e incluindo seu nome de usuário e senha LDAP na connection string.

Os seguintes trechos de código mostram como especificar o mecanismo de autenticação, usando os seguintes placeholders:

  • LDAP username - seu nome de usuário LDAP

  • password - a senha do usuário LDAP

  • hostname - endereço de rede do seu MongoDB Server, acessível pelo seu cliente

  • port - número da porta do seu servidor MongoDB

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

Para especificar o mecanismo de autenticação LDAP (PLAIN) usando uma cadeia de conexão:

  • Atribuir o parâmetro de URL authMechanism ao valor PLAIN

  • (opcional) Atribua o parâmetro de URL do authSource ao valor $external

Observação

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

Seu código para instanciar um MongoClient deve ser semelhante ao seguinte:

val connectionString = ConnectionString("<LDAP username>:<password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN")
val mongoClient = MongoClient.create(connectionString)

Para especificar o mecanismo de autenticação LDAP (PLAIN) usando a classe MongoCredential , use o método createPlainCredential() . Seu código para instanciar um MongoClient deve ser semelhante ao seguinte:

val credential = MongoCredential.createPlainCredential("<LDAP username>", "$external", "<password>".toCharArray())
val settings = MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
val mongoClient = MongoClient.create(settings)

Importante

O mecanismo de autenticação MONGODB-OIDC requer servidor MongoDB v7.0 ou posterior em execução em uma plataforma Linux.

As seções a seguir descrevem como usar o mecanismo de autenticação MONGODB-OIDC para autenticar em várias plataformas.

Para obter mais informações sobre o mecanismo de autenticação MONGODB-OIDC, consulte Autenticação do OpenID Connect e MongoDB Server do MongoDB Server no manual do Servidor MongoDB.

Se seu aplicação for executado em uma VM do Azure ou usar o Serviço de Metadados de Instância do Azure (IMDS), você pode autenticar no MongoDB usando o suporte Azure integrado do driver Kotlin .

Você pode especificar a autenticação do Azure IMDS OIDC utilizando uma instância do MongoCredential ou especificando suas credenciais na string de conexão.

Selecione nas abas Connection String ou MongoCredential para ver a sintaxe correspondente.

Substitua o espaço reservado <percent-encoded audience> no seguinte código pelo valor codificado por porcentagem do parâmetro do servidor de público configurado em sua implantação do MongoDB .

O caractere de vírgula (,) e sua codificação (%2C) são reservados, e o uso desses caracteres em um valor faz com que o driver interprete as vírgulas como delimitadores de pares de valores-chave. Você deve especificar valores que contêm vírgulas em uma instância do MongoCredential , como demonstrado na aba MongoCredential .

val connectionString = ConnectionString(
"mongodb://<OIDC principal>@<hostname>:<port>/?" +
"?authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>")
val mongoClient = MongoClient.create(connectionString)

Substitua o espaço reservado <OIDC principal> pelo ID do cliente ou ID do aplicativo da identidade gerenciada pelo Azure ou do aplicação corporativo. Substitua o espaço reservado <audience> pelo valor do parâmetro de servidor audience configurado em sua implantação do MongoDB .

val credential = MongoCredential.createOidcCredential("<OIDC principal>")
.withMechanismProperty("ENVIRONMENT", "azure")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>")
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build())

Se seu aplicação é executado em uma VM do Google Compute Engine ou usa o Serviço de Metadados de Instância GCP, você pode autenticar no MongoDB usando o suporte GCP integrado do driver Kotlin .

Você pode especificar a autenticação GCP IMDS OIDC usando uma instância MongoCredential ou especificando suas credenciais na string de conexão.

Selecione nas abas Connection String ou MongoCredential para ver a sintaxe correspondente.

Substitua o espaço reservado <percent-encoded audience> no seguinte código pelo valor codificado por porcentagem do parâmetro do servidor de público configurado em sua implantação do MongoDB .

O caractere de vírgula (,) e sua codificação (%2C) são reservados, e o uso desses caracteres em um valor faz com que o driver interprete as vírgulas como delimitadores de pares de valores-chave. Você deve especificar valores que contêm vírgulas em uma instância do MongoCredential , como demonstrado na aba MongoCredential .

val connectionString = ConnectionString(
"mongodb://<OIDC principal>@<hostname>:<port>/?" +
"authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>")
val mongoClient = MongoClient.create(connectionString)

Substitua o espaço reservado <audience> pelo valor do parâmetro de servidor audience configurado em sua implantação do MongoDB .

val credential = MongoCredential.createOidcCredential("<OIDC principal>")
.withMechanismProperty("ENVIRONMENT", "gcp")
.withMechanismProperty("TOKEN_RESOURCE", "<audience>")
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build())

O driver Kotlin não oferece suporte integrado para todas as plataformas, incluindo Azure Functions e Azure Kubernetes Service (AKS). Em vez disso, você deve definir um retorno de chamada de resposta personalizado para usar o OIDC para autenticar a partir dessas plataformas. Para fazer isso, use a propriedade de autenticação "OIDC_CALLBACK" , como mostrado no seguinte exemplo de código:

val credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK") { context: Context ->
val accessToken = "..."
OidcCallbackResult(accessToken)
}

O valor da propriedade "OIDC_CALLBACK" deve ser um Lambda ou outra implementação da interface funcional OidcCallback que aceite um OidcCallbackContext como parâmetro e retorne um OidcCallbackResult.

O exemplo a seguir usa um exemplo de chamada de resposta para recuperar um token OIDC de um arquivo chamado "access-token.dat" no sistema de arquivos local:

val credential = MongoCredential.createOidcCredential(null)
.withMechanismProperty("OIDC_CALLBACK") { context: Context ->
val accessToken = String(Files.readAllBytes(Paths.get("access-token.dat")))
OidcCallbackResult(accessToken)
}
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyToClusterSettings { builder ->
builder.hosts(listOf(ServerAddress("<hostname>", <port>)))
}
.credential(credential)
.build()
)

Voltar

Mecanismos de autenticação