Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Autenticação Kerberos (GSSAPI)

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

Terminologia

A página utiliza GSSAPI para se referir ao mecanismo de autenticação e Kerberos para se referir ao protocolo ou serviço subjacente. O driver autentica usando o mecanismo GSSAPI RFC-4752 SASL, que é criado sobre o protocolo Kerberos.

As seções a seguir contêm amostras de código que usam os seguintes valores de espaço reservado:

  • <username>: Seu nome principal codificado para URL, como "username%40REALM.ME"

  • <hostname>: O endereço de rede da sua implantação do MongoDB , acessível pelo seu cliente

  • <port>: O número da porta da sua implantação do MongoDB

Selecione a aba Connection String ou MongoCredential abaixo para obter instruções e amostras de código para especificar este mecanismo de autenticação:

O exemplo a seguir autentica no GSSAPI usando uma string de conexão:

MongoClient mongoClient = MongoClients
.create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");

Para especificar o mecanismo de autenticação GSSAPI usando a classe MongoCredential , chame o método createGSSAPICredential() , conforme mostrado no exemplo a seguir:

MongoCredential credential = MongoCredential.createGSSAPICredential("<username>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

Para adquirir um ticket Kerberos, as bibliotecas GSSAPI Java exigem que você especifique o Realm e as propriedades do sistema JVM do Centro de Distribuição de Chaves (KDC). O exemplo a seguir mostra como definir estas propriedades:

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 de autenticação , dependendo da configuração do Kerberos:

  • SERVICE_NAME

  • CANONICALIZE_HOST_NAME

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_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 seguinte autentica para GSSAPI e especifica a propriedade SERVICE_NAME :

MongoClient mongoClient = MongoClients
.create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");

Importante

Você pode especificar as seguintes propriedades GSSAPI somente em uma instância MongoCredential :

  • JAVA_SUBJECT

  • JAVA_SASL_CLIENT_PROPERTIES

  • JAVA_SUBJECT_PROVIDER

Selecione a guia MongoCredential para saber como especificar estas propriedades.

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 constantes de nome da propriedade definidas na classe MongoCredential :

O exemplo seguinte autentica para GSSAPI e especifica a constante SERVICE_NAME_KEY:

MongoCredential credential = MongoCredential
.createGSSAPICredential("<username>");
credential = credential
.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");

A propriedade JAVA_SUBJECT_KEY exige um objeto javax.security.auth.Subject. Para recuperar um Subject, você deve primeiro autenticar através do Serviço de Autenticação e Autorização Java (JAAS) utilizando um LoginContext. O exemplo a seguir mostra esta configuração:

LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>);
loginContext.login();
Subject subject = loginContext.getSubject();
MongoCredential credential = MongoCredential
.createGSSAPICredential("<username>");
credential = credential
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);

Por padrão, o driver Java Reactive Streams armazena em cache tíquetes Kerberos pela instância MongoClient que os criou. Se a sua implantação cria e destrói com frequência instâncias do MongoClient, você pode melhorar o desempenho alterando o comportamento padrão de cache de ticket Kerberos para cache por processo.

Importante

Você deve usar a classe MongoCredential para alterar o comportamento de cache padrão, pois o mecanismo de autenticação da string de conexão não é compatível com a propriedade do 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 */
String myLoginContext = "myContext";
MongoCredential credential = MongoCredential
.createGSSAPICredential("<username>");
/* Login context defaults to "com.sun.security.jgss.krb5.initiate"
if unspecified in KerberosSubjectProvider */
credential = credential
.withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY,
new KerberosSubjectProvider(myLoginContext));

Observação

No Windows, o JRE da Oracle usa a Autoridade de Segurança Local (LSA) em vez da Interface do Provedor de Suporte de Segurança (SSPI) em sua implementação do GSSAPI. Isso limita a interoperabilidade com o Windows Active Directory e implementações de logon único. Para saber mais, consulte os seguintes recursos:

Para saber mais sobre autenticação no MongoDB, consulte Autenticação no manual do MongoDB Server .

Para saber mais sobre como criar um MongoClient objeto usando o driver Java Reactive Streams, consulte o guia Conectar ao MongoDB .

Para saber mais sobre as aulas e os métodos mencionados neste guia, consulte a seguinte documentação da API: