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 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.

As seções a seguir contêm exemplos 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 as propriedades do sistema JVM Realm e Key Distribution Center (KDC). O exemplo a seguir mostra como definir essas 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 a seguir 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 a seguir 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 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:

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 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 */
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 Autoridade de Segurança Local (LSA) em vez de Interface do provedor de suporte de segurança (SSPI) em sua implementação de GSSAPI. Isso limita a interoperabilidade com o Windows Active Directory e a implementação 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 objeto MongoClient 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: