Kerberos (GSSAPI)
Nesta página
Visão geral
O mecanismo de autenticação da API de serviços de segurança genérica (GSSAPI) permite que você use seu nome principal para autenticar em um serviço Kerberos. Você pode usar esse mecanismo somente ao autenticar para Enterprise Advanced.
Espaços reservados de código
Os exemplos de código nesta página usam os seguintes espaços reservados:
<db_username>
: seu nome principal codificado por URL. Por exemplo:"username%40REALM.ME"
<hostname>
: o endereço de rede da sua implantação do MongoDB .<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
).
Para usar os exemplos de código, substitua esses espaços reservados por seus próprios valores.
Specify GSSAPI Authentication
Selecione a aba Connection String ou MongoCredential abaixo para obter instruções e amostras de código para especificar este mecanismo de autenticação:
To specify the GSSAPI authentication mechanism by using a connection string, perform the following actions:
Atribuir o parâmetro de URL
authMechanism
ao valorGSSAPI
(opcional) Atribua o parâmetro de URL do
authSource
ao valor$external
Observação
Se você especificar o mecanismo GSSAPI
, não poderá atribuir authSource
a nenhum valor diferente de $external
.
O código para instanciar um MongoClient
é semelhante ao seguinte:
MongoClient mongoClient = MongoClients.create("<db_username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
To specify the GSSAPI authentication mechanism by using the
MongoCredential
class, use the createGSSAPICredential()
method. The code to instantiate a MongoClient
resembles
the following:
MongoCredential credential = MongoCredential.createGSSAPICredential(<db_username>); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
To acquire a Kerberos ticket, the GSSAPI Java libraries require you to specify the realm and Key Distribution Center (KDC) system properties. See the sample settings in the following example:
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
Propriedades adicionais
You might need to specify one or more of the following
MongoCredential
mechanism properties depending on your Kerberos setup:
SERVICE_NAME
CANONICALIZE_HOST_NAME
JAVA_SUBJECT
JAVA_SASL_CLIENT_PROPERTIES
JAVA_SUBJECT_PROVIDER
Importante
Você só pode especificar as seguintes propriedades GSSAPI utilizando 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 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:
MongoClient mongoClient = MongoClients.create("<db_username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
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
:
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:
MongoCredential credential = MongoCredential.createGSSAPICredential(<db_username>); credential = credential.withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "myService");
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>); loginContext.login(); Subject subject = loginContext.getSubject(); MongoCredential credential = MongoCredential.createGSSAPICredential(<db_username>); credential = credential.withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
Configure Caching Behavior
Por padrão, o driver Java armazena em cache tickets 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 tickets Kerberos em cache 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
. Se você quiser armazenar tíquetes Kerberos em cache por processo, selecione a guia MongoCredential para saber como fazer isso.
Para armazenar tíquetes Kerberos em cache por processo, você deve especificar a JAVA_SUBJECT_PROVIDER
propriedade do mecanismo e fornecer um KerberosSubjectProvider na sua MongoCredential
instância do . O código para configurar o driver Java para armazenar em cache os tickets Kerberos por processo é semelhante ao seguinte:
/* all MongoClient instances sharing this instance of KerberosSubjectProvider will share a Kerberos ticket cache */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential.createGSSAPICredential(<db_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));
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos nesta página, consulte a seguinte documentação da API: