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.
Observação
Terminologia
A página usa GSSAPI ao se referir ao mecanismo de autenticação e Kerberos ao se referir ao protocolo ou serviço subjacente. O driver autentica usando o mecanismo SASL GSSAPI RFC-4752, que é criado sobre o protocolo Kerberos.
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 aba Connection String ou MongoCredential para ver as instruções e um exemplo de código:
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) Defina 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 mongoClient = MongoClient( "mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI" )
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 mongoClient = MongoClient(MongoClientSettings .builder() .applyToClusterSettings(builder => builder.hosts(List(new ServerAddress("<hostname>", <port>)).asJava)) .credential(credential) .build())
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 de autenticação, dependendo da configuração do Kerberos:
SERVICE_NAMECANONICALIZE_HOST_NAMEJAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Selecione a aba Connection String ou MongoCredential abaixo para obter instruções e amostras de código para especificar estas propriedades:
Para especificar as propriedades adicionais do GSSAPI, inclua a propriedade na string de conexão como um parâmetro de URL no formato <PROPERTY_NAME>:<value>.
O exemplo a seguir autentica para GSSAPI e especifica a propriedade SERVICE_NAME:
val mongoClient = MongoClient( "mongodb://<Kerberos principal>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService" )
Importante
Você pode especificar as seguintes propriedades GSSAPI somente usando o MongoCredential:
JAVA_SUBJECTJAVA_SASL_CLIENT_PROPERTIESJAVA_SUBJECT_PROVIDER
Selecione a guia MongoCredential para ver como especificá-los.
Para especificar as propriedades adicionais do 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 :
O exemplo a seguir autentica para GSSAPI e especifica a constante SERVICE_NAME_KEY:
val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService")
A propriedade JAVA_SUBJECT_KEY requer um objeto javax.security.auth.Subject. Para recuperar um Subject, você deve primeiro autenticar através do Java Authentication and Authorization Service (JAAS) usando um LoginContext. O exemplo a seguir mostra esta configuração:
val loginContext = new LoginContext("<LoginModule implementation from JAAS config>") loginContext.login() val subject: Subject = loginContext.getSubject() val credential = MongoCredential.createGSSAPICredential("<Kerberos principal>") .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject)
Cache de tickets
Por padrão, o driver Scala armazena em cache os tickets Kerberos pela instância MongoClient que os criou. Se sua implantação criar e destruir instâncias MongoClient com frequência, você poderá melhorar o desempenho alterando o comportamento padrão de cache de tickets Kerberos para cache por processo.
Importante
Você deve usar a classe MongoCredential para alterar o comportamento de cache padrão, porque o mecanismo de autenticação da string de conexão não oferece suporte à propriedade de mecanismo JAVA_SUBJECT_PROVIDER.
Para armazenar em cache tickets Kerberos por processo, especifique a propriedade de mecanismo JAVA_SUBJECT_PROVIDER e forneça um KerberosSubjectProvider em sua instância MongoCredential, conforme mostrado no exemplo a seguir:
/* 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, new 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 Scala, consulte o guia Criar um MongoClient.
Documentação da API
Para saber mais sobre as classes e métodos para autenticar seu aplicativo com o driver Scala, consulte a seguinte documentação da API: