Visão geral
O mecanismo de autenticação OpenID Connect (OIDC) permite que você autentique no MongoDB usando um provedor de identidade de terceiros, como o Azure ou o Google Cloud Platform (GCP).
Você pode usar esse mecanismo somente ao autenticar para MongoDB Atlas ou Enterprise Advanced e somente ao autenticar para MongoDB v7.0 ou posterior.
Dica
Autenticação OIDC
Para saber mais sobre como configurar o MongoDB Atlas para autenticação OIDC, consulte Configurar Federação de Identidade da Força de Trabalho com OIDC na documentação do Atlas .
Para obter mais informações sobre o uso da autenticação OIDC com o MongoDB, consulte Autenticação do OpenID Connect e Parâmetros do MongoDB Server no manual do servidor MongoDB.
As seções a seguir descrevem como usar o mecanismo de autenticação MONGODB-OIDC para autenticar em várias plataformas.
IMDS do Azure
Se seu aplicação for executado em uma VM do Azure ou de outra forma usar o Azure Instance Metadata Service (IMDS), você poderá autenticar no MongoDB usando o suporte integrado do Azure driver Kotlin.
Você pode especificar a autenticação Azure IMDS OIDC especificando suas credenciais na string de conexão ou usando uma instância do MongoCredential. Selecione a aba Connection String ou MongoCredential para saber como especificar a autenticação Azure IMDS OIDC.
Substitua o espaço reservado <percent-encoded audience> no seguinte código pelo valor codificado por porcentagem do parâmetro do servidor de público configurado em sua implantação do MongoDB .
O caractere vírgula (,) e sua codificação (%2C) são reservados, e utilizar estes caracteres em um valor faz com que o driver interprete vírgulas como delimitadores de pares de chave-valor. Você deve especificar valores que contêm vírgulas em uma instância do MongoCredential.
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
Substitua o espaço reservado <OIDC principal> pelo ID do cliente ou ID do aplicativo da identidade gerenciada pelo Azure ou do aplicação corporativo. Substitua o espaço reservado <audience> pelo valor do parâmetro de servidor audience configurado em sua implantação do MongoDB .
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "azure") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
GCP IMDS
Se o seu aplicação for executado em uma VM do Google Compute Engine ou usar o Serviço de Metadados de Instância GCP, você poderá autenticar no MongoDB usando o suporte GCP integrado do driver Kotlin .
Você pode especificar a autenticação GCP IMDS OIDC especificando suas credenciais em uma string de conexão ou usando uma instância MongoCredential.
Substitua o espaço reservado <percent-encoded audience> no seguinte código pelo valor codificado por porcentagem do parâmetro do servidor de público configurado em sua implantação do MongoDB .
O caractere vírgula (,) e sua codificação (%2C) são reservados, e utilizar estes caracteres em um valor faz com que o driver interprete vírgulas como delimitadores de pares de chave-valor. Você deve especificar valores que contêm vírgulas em uma instância do MongoCredential.
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
Substitua o espaço reservado <audience> pelo valor do parâmetro de servidor audience configurado em sua implantação do MongoDB .
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "gcp") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
Kubernetes
Se seu aplicação for executado em um cluster Kubernetes, você poderá autenticar no MongoDB usando o suporte integrado ao Kubernetes do driver Kotlin . Você pode especificar a autenticação do Kubernetes OIDC especificando suas credenciais em uma string de conexão ou utilizando uma instância do MongoCredential.
Para especificar o Kubernetes OIDC como o mecanismo de autenticação, defina as seguintes opções em sua string de conexão:
authMechanism: Defina comoMONGODB-OIDC.authMechanismProperties: Defina comoENVIRONMENT:k8s.
Substitua o espaço reservado <percent-encoded audience> no seguinte código pelo valor codificado por porcentagem do parâmetro do servidor de público configurado em sua implantação do MongoDB .
val connectionString = ConnectionString( "mongodb://<OIDC principal>@<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s,TOKEN_RESOURCE:<percent-encoded audience>") val mongoClient = MongoClient.create(connectionString)
Substitua hostname e port pelo endereço de rede e o número da porta da sua implantação do MongoDB . Além disso, substitua o espaço reservado <audience> pelo valor do parâmetro de servidor audience configurado em sua implantação do MongoDB .
val credential = MongoCredential.createOidcCredential("<OIDC principal>") .withMechanismProperty("ENVIRONMENT", "k8s") .withMechanismProperty("TOKEN_RESOURCE", "<audience>") val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build())
Chamada de resposta personalizada
O driver Kotlin não oferece suporte integrado para todas as plataformas, incluindo Azure Functions e Azure Kubernetes Service (AKS). Em vez disso, você deve definir um retorno de chamada de resposta personalizado para usar o OIDC para autenticar a partir dessas plataformas. Para fazer isso, use a propriedade de autenticação "OIDC_CALLBACK" , como mostrado no seguinte exemplo de código:
val credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK") { context: Context -> val accessToken = "..." OidcCallbackResult(accessToken) }
O valor da propriedade "OIDC_CALLBACK" deve ser um Lambda ou outra implementação da interface funcional OidcCallback que aceite um OidcCallbackContext como parâmetro e retorne um OidcCallbackResult.
O exemplo a seguir usa um exemplo de chamada de resposta para recuperar um token OIDC de um arquivo chamado "access-token.dat" no sistema de arquivos local:
val credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK") { context: Context -> val accessToken = String(Files.readAllBytes(Paths.get("access-token.dat"))) OidcCallbackResult(accessToken) } val mongoClient = MongoClient.create( MongoClientSettings.builder() .applyToClusterSettings { builder -> builder.hosts(listOf(ServerAddress("<hostname>", <port>))) } .credential(credential) .build() )