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
A página refere-se ao mecanismo de autenticação GSSAPI
em vez de Kerberos
porque o driver autentica usando o mecanismo GSSAPI RFC-4652 SASL.
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
authMechanism
comoGSSAPI
(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)
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_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)
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: