Visão geral
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 mecanismo de autenticação GSSAPI em vez de Kerberos porque o driver autentica usando o mecanismo GSSAPI RFC-4652 SASL.
Espaços reservados de código
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 clienteport- número da porta do seu servidor MongoDB
Autenticar com GSSAPI
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_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Importante
Você pode especificar as seguintes propriedades GSSAPI somente usando o MongoCredential:
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_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) )