Visão geral
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.
Especificar autenticação Kerberos
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
authMechanismcomoGSSAPI(opcional) Configure o parâmetro de URL do
authSourcepara$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)
Adquirindo um ticket Kerberos
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
Propriedades adicionais
Talvez seja necessário especificar uma ou mais das seguintes propriedades adicionais do mecanismo MongoCredential , dependendo da configuração do Kerberos:
SERVICE_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Importante
Você só pode especificar as seguintes propriedades GSSAPI usando o MongoCredential:
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_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)
Cache de tickets
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) )
Informações adicionais
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.
Documentação da API
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: