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

Autenticação Kerberos (GSSAPI)

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

Os exemplos de código nesta página usam os seguintes espaços reservados:

  • 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

Para especificar o mecanismo de autenticação GSSAPI usando uma string de conexão, atribua o parâmetro de URL authMechanism ao valor GSSAPI Em seguida, opcionalmente atribua o parâmetro de URL 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 GSSAPI Java exigem que você especifique as propriedades do sistema Realm e Key Distribution 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ê pode especificar as seguintes propriedades GSSAPI somente usando o MongoCredential:

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

O exemplo a seguir mostra como especificar as propriedades adicionais:

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 :

O exemplo a seguir instancia um MongoCredential que utiliza GSSAPI e o SERVICE_NAME_KEY:

val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>")
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")

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

Voltar

LDAP (simples)

Nesta página