Autenticação do MongoDB Atlas usando contas de serviço (OAuth)
Avalie esse Tutorial
A API de administração do Atlas do MongoDB fornece uma maneira eficiente de interagir com os recursos doMongoDB Atlas . Ele permite que você gerencie suas organizações, projetos, implementações e muito mais do Atlas , permitindo automatizar e integrar perfeitamente tarefas administrativas diretamente em seus aplicativos ou sistemas CI/CD. O MongoDB Atlas oferece vários clientes de API, incluindo os provedoresAtlas CLI e Terraform. Em determinados cenários, você pode aproveitar o acesso programático direto de aplicativos e sistemas de automação escritos em linguagens como Go, Python ou Node.js.
Com a introdução das Contas de Serviço para a API de Administração do Atlas , agora você pode usar2 credenciais de token OAuth ao executar solicitações de API. O2 padrão OAuth simplifica a autenticação com a API do Atlas em comparação com a autenticação digest usada anteriormente. As Contas de Serviço, atualmente disponíveis como um recurso de visualização, oferecem uma nova maneira de autenticar no Atlas usando o OAuth padrão do 2 setor.0 com o fluxo de Credenciais do Cliente. Isto fornece um método seguro e eficiente para gerenciar o acesso aos seus recursos do Atlas .
Neste tutorial, orientaremos você pelo processo de configuração de uma conta de serviço usando o Atlas SDK Go, Node.js e Python. Forneceremos instruções sobre como obter as credenciais necessárias e fazer solicitações de API programáticas ao MongoDB Atlas diretamente de seu aplicação.
As Contas de Serviço fornecem uma nova maneira de autenticar no Atlas usando OAuth.2 0 com o fluxo de Credenciais do Cliente. Uma conta de serviço fornece um ID e um segredo do cliente , que são usados para gerar tokens de acesso para executar solicitações de API. Atualmente, os tokens de acesso são válidos por uma hora. As contas de serviço são criadas dentro de uma organização do Atlas e podem ser configuradas para acessar vários projetos dentro dessa organização.
Antes de começar, verifique se tem o seguinte:
- Uma conta do MongoDB Atlas . Se você ainda não tiver um, siga o guia Iniciar com Atlas para criar sua conta e primeiro cluster.
- Uma conta de serviço com um ID e um segredo do cliente .
- Depois de criar uma conta de serviço, você receberá um ID e um segredo do cliente , que usará para gerar tokens de acesso OAuth para solicitações do Atlas API.
OBSERVAÇÃO: as credenciais da conta de serviço darão a qualquer pessoa acesso aos seus recursos do MongoDB Atlas . É crucial armazenar com segurança o ID e o segredo do cliente e nunca expô-los em plataformas públicas de código-fonte como o Github.
Antes de executar qualquer exemplo, certifique-se de executar todos os pré-requisitos.
Neste tutorial, forneceremos etapas para fazer solicitações de API programáticas em diferentes idiomas:
- Python
- Node.js
Consulte a documentação do Atlas para obter uma lista completa de APIs do Atlas para idiomas sem um SDK do Atlas . Você também pode usar nossa integração oficial do Postman para explorar e interagir com a própria API.
O processo de autenticação da API do Atlas consistirá nas seguintes etapas, independentemente da linguagem e estrutura:
- Carregando credenciais usando variáveis de ambiente
- A título de exemplo, usaremos variáveis de ambiente para armazenar o ID e o segredo do cliente .
- Gerando token de acesso
- Dependendo do seu idioma, algumas bibliotecas executarão uma solicitação POST para o endpoint do token OAuth pronto para uso. Em outros casos, você mesmo precisará fazer uma solicitação. A resposta da chamada conterá o token de acesso que será usado para autenticação.
- Usando token de acesso
- O token de acesso será incluído no cabeçalho de autorização das solicitações de API subsequentes para autenticá-las.
- Um token de acesso precisa ser gerado novamente quando expira, e a API retorna um 401 código de status HTTP.
Usaremos o Python para começar com o exemplo de integração de conta de serviço mais simples e autônomo. O Python fornece muitas bibliotecas para realizar solicitações HTTP. Por exemplo, usaremos a biblioteca de solicitações para lidar com 2 a0 autenticação OAuth..
- Instale os pacotes necessários:
1 pip install requests 2 pip install oauthlib
Etapa1 #: Abra seu editor de código favorito e crie um arquivo chamado atlas_request.py.
Etapa2 #: Copie o conteúdo para o novo arquivo. Veja como será o script completo:
1 import os 2 from requests_oauthlib import OAuth2Session 3 from oauthlib.oauth2 import BackendApplicationClient 4 from requests.auth import HTTPBasicAuth 5 import requests 6 7 # Constants 8 token_path = "/api/oauth/token" 9 api_url = "/api/atlas/v2/" 10 client_id = os.environ["MONGODB_ATLAS_CLIENT_ID"] 11 client_secret = os.environ["MONGODB_ATLAS_CLIENT_SECRET"] 12 base_url = "https://cloud.mongodb.com" 13 14 def get_access_token(): 15 # Use BackendApplicationClient for the client credentials grant 16 client = BackendApplicationClient(client_id=client_id) 17 oauth = OAuth2Session(client=client) 18 19 # Prepare Basic Auth credentials 20 auth = HTTPBasicAuth(client_id, client_secret) 21 token_url = f"{base_url}{token_path}" 22 23 # Fetch the token using the proper authentication 24 token = oauth.fetch_token(token_url=token_url, auth=auth) 25 return token['access_token'] 26 27 def fetch_data(): 28 access_token = get_access_token() 29 headers = { 30 "Authorization": f"Bearer {access_token}", 31 "Accept": "application/vnd.atlas.2023-01-01+json" 32 } 33 34 response = requests.get(f"{base_url}{api_url}", headers=headers) 35 response.raise_for_status() 36 37 return response.json() 38 39 if __name__ == "__main__": 40 try: 41 data = fetch_data() 42 print(data) 43 except Exception as e: 44 print(f"Error: {e}")
Etapa3 #: defina as variáveis de ambiente em seu terminal:
1 set +o history # disable history as we're going to paste credentials 2 export SA_CLIENT_ID=your_client_id 3 export SA_CLIENT_SECRET=your_client_secret
Etapa4 #: execute o exemplo:
1 python atlas_request.py
Como resultado, você deverá ver o Status da resposta: 200 no console.
Vamos descompactar o que está acontecer no script Python passo a passo.
O script Python executa várias etapas para autenticar com o MongoDB Atlas usando OAuth2 e consultar sua API.
- Começamos carregando nossas credenciais de variáveis de ambiente.
- As variáveis de ambiente nos permitem gerenciar informações confidenciais, como o ID e o segredo do cliente MongoDB Atlas , sem codificá-las em seu script.
- Recuperamos as seguintes variáveis:
MONGODB_ATLAS_CLIENT_ID
eMONGODB_ATLAS_CLIENT_SECRET
para2 autenticação OAuth.
- Com nossas credenciais em vigor, obtemos um token de acesso, essencial para fazer solicitações de API autenticadas.
- A função get_access_token:
- Estamos aproveitando o tipo de concessão de credenciais do cliente por meio do BackendApplicationClient de oauthlib.
- As operações de gerenciamento de tokens são tratadas inteiramente pela biblioteca.
- Certifique-se de sempre usar a versão mais recente da bibliotecaoauthlib para evitar possíveis problemas de segurança.
- Usando HTTPBasicAuth, geramos as credenciais necessárias para solicitar um token.
- Observe que o token de acesso precisa ser atualizado periodicamente após a expiração.
- Usando o token de acesso obtido:
- Primeiro, pegamos nosso token de acesso retornado pelo método get_access_token.
- Em seguida, configuramos nossa solicitação com os cabeçalhos adequados:
- A autorização está definida para o portador {access_token}.
- Aceitar especifica a versão da API do MongoDB Atlas necessária para executar solicitações na API do Atlas (aplicação/vnd.atlas.2023-01-01+json).
- A função chama o ponto de conexão Atlas API e aguarda a resposta!
GET
solicitação para o endpoint especificado da API Atlas ({base_url}/api/atlas/v2/
).
O Node.js fornece um grande número de bibliotecas para realizar solicitações HTTP. Nosso exemplo seguirá uma recomendações de arquitetura de referência do Node.JS usando a bibliotecaAxios npm.
Axios é um cliente HTTP popular baseado em promessa para o navegador e Node.js. Por questões de brevidade, o exemplo é escrito em JavaScript, mas pode ser adaptado para o Typescript usando o Axios Typepings.
- Para projetos existentes, instale os axios necessários e o pacotesimple-oauth :2
1 npm install —-save axios simple-oauth2
Se você estiver recriando um novo projeto, precisará inicializar o arquivo .json do pacote executando:
1 npm init
Etapa1 #: Abra seu editor de código favorito e crie um arquivo chamado atlas_request.js.
Etapa2 #: Copie o conteúdo para o novo arquivo. Veja como será o script completo:
1 const axios = require('axios'); 2 const { ClientCredentials } = require('simple-oauth2'); 3 4 // Can be any API url from https://www.mongodb.com/pt-br/docs/atlas/reference/api-resources-spec/v2/ 5 const apiURL = '/api/atlas/v2/'; 6 7 const { MONGODB_ATLAS_CLIENT_ID, MONGODB_ATLAS_CLIENT_SECRET } = process.env; 8 9 var baseUrl = "https://cloud.mongodb.com"; 10 11 // OAuth2 Client Configuration 12 const oauth2Config = { 13 client: { 14 id: MONGODB_ATLAS_CLIENT_ID, 15 secret: MONGODB_ATLAS_CLIENT_SECRET, 16 }, 17 auth: { 18 tokenHost: baseUrl, 19 tokenPath: '/api/oauth/token', 20 }, 21 }; 22 23 // Create OAuth2 Client 24 const oauth2Client = new ClientCredentials(oauth2Config); 25 26 async function fetchWithOAuth2() { 27 try { 28 // Retrieve access token 29 const tokenParams = { 30 }; 31 const tokenResponse = await oauth2Client.getToken(tokenParams); 32 const accessToken = tokenResponse.token.access_token; 33 const headers = { 34 Authorization: `Bearer ${accessToken}`, 35 Accept: 'application/vnd.atlas.2023-01-01+json' 36 } 37 // Make API Request 38 const response = await axios.get(baseUrl + apiURL, { 39 headers: headers 40 }); 41 42 console.log('Response data:', response.data); 43 } catch (error) { 44 console.error('Error during request:', error.message); 45 } 46 } 47 48 fetchWithOAuth2();
Etapa3 #: defina as variáveis de ambiente em seu terminal:
1 set +o history # to disable history for credentials 2 export MONGODB_ATLAS_CLIENT_ID=your_client_id 3 export MONGODB_ATLAS_CLIENT_SECRET=your_client_secret
Etapa4 #: exemplo de execução :
1 node atlas-request.js
Como resultado, devo ver a resposta da API no console.
Semelhante ao exemplo Python , o código executará várias etapas comuns para OAuth.
- Carregando as variáveis de ambiente: Recuperamos as variáveis MONGODB_ATLAS_CLIENT_ID e MONGODB_ATLAS_CLIENT_SECRET do ambiente.
- Para o exemplo, optamos por usar a 2 bibliotecasimple-oauth . A biblioteca nos permite obter e atualizar automaticamente tokens OAuth. Para fazer isso, precisamos fornecer uma configuração do cliente :2
client_id
eclient_secret
de variáveis de ambiente.auth.tokenHost
faz referência à API de token OAuth fornecida pelo Atlas (/API/oauth/token) Usamos essa URL para recuperação de token.
- Chamando 2simple-oauth.getToken() para buscar um novo token de acesso: em caso de sucesso, recupera o access_token da resposta do token.
- Fazer uma solicitação de API:
- Precisamos definir o
Authorization
cabeçalho que contém nosso token recém-gerado. - O endpoint pode ser alterado para consultar diferentes recursos da API do MongoDB Atlas .
- Durante várias solicitações, o token de acesso pode expirar e resultar em um código de status HTTP 401.
- Você pode configurar seu aplicação para emitir outro token de acesso após a expiração.
O Atlas SDK Go fornece autenticação OAuth usando Contas de serviço, que está atualmente disponível como um recurso de visualização.
Além disso, os desenvolvedores podem usar a API de gerenciamento de contas de serviço para criar, atualizar e excluir contas de serviço diretamente do SDK.
- Crie um arquivogo.mod e instale o pacote necessário .
1 go mod init example.com/service-accounts 2 go get go.mongodb.org/atlas-sdk/v20241023001/admin
Para garantir que você esteja usando a versão mais recente do SDK Go, substitua a20241023001 string de versão v pela versão mais recente das versões do SDK Go.
Etapa1 #: Crie um novo arquivo chamado atlas_request.go no editor de sua escolha.
Etapa2 #: Cole o seguinte conteúdo no novo arquivo:
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 "os" 8 9 "go.mongodb.org/atlas-sdk/v20241113001/admin" 10 ) 11 12 // Example for Using Service Account for listing Atlas Projects. 13 func main() { 14 // Fetch clientID and clientSecret from environment variables 15 clientID := os.Getenv("MONGODB_ATLAS_CLIENT_ID") 16 clientSecret := os.Getenv("MONGODB_ATLAS_CLIENT_SECRET") 17 18 if clientID == "" || clientSecret == "" { 19 log.Fatal("Missing required environment variables") 20 } 21 22 ctx := context.Background() 23 sdk, err := admin.NewClient( 24 admin.UseBaseURL(host), 25 //Out-of-the-box support for OAuth in the SDK 26 admin.UseOAuthAuth(ctx, clientID, clientSecret), 27 ) 28 if err != nil { 29 log.Fatalf("Error: %v", err) 30 } 31 32 orgs, _, err := sdk.OrganizationsApi.ListOrganizations(ctx).Execute() 33 if err != nil { 34 log.Fatalf("Error: %v", err) 35 } 36 if orgs.GetTotalCount() == 0 { 37 log.Fatalf("no orgs") 38 } 39 fmt.Println("Successfully used Service Account") 40 }
Etapa3 #: defina as variáveis de ambiente em seu terminal:
1 export MONGODB_ATLAS_CLIENT_ID=your_client_id 2 export MONGODB_ATLAS_CLIENT_SECRET=your_client_secret 3 export MONGODB_ATLAS_ORG=your_org_id
Etapa4 #: execute o exemplo:
1 go run atlas_request.go
Como resultado, você deverá ver a Conta de serviço usada com sucesso em seu terminal.
O código está usando o método admin.UseOAuthAuth(ctx, clientID, clientSecret) fornecido pelo SDK para autenticar automaticamente usando Contas de Serviço. Nenhuma outra ação é necessária.
Além disso, para autenticar, o SDK Go fornece um exemplo de API de gerenciamento de conta de serviço , que permitirá gerenciar contas de serviço.
Este tutorial demonstra como configurar contas de serviço e interagir com a API do Atlas usando o SDK Go, Node.js e Python. Com esses exemplos, você pode integrar as operações da API do Atlas em seus aplicativos escritos nessas linguagens.
As Contas de Serviço e a API de Administração do Atlas fornecem um novo conjunto de possibilidades para gerenciar seus recursos do MongoDB Atlas . Ao aproveitar o OAuth2 com o fluxo de credenciais do cliente, os desenvolvedores podem integrar o acesso programático em seus aplicativos e fluxos de trabalho de automação e, ao mesmo tempo, seguir as práticas de segurança padrão do setor.
Esteja você automatizando implantações, gerenciando bancos de dados ou criando ferramentas operacionais, a API de administração do Atlas , combinada com contas de serviço, fornece uma base sólida para a integração perfeita do MongoDB Atlas .
Aviso:
- Sempre proteja suas credenciais usando variáveis de ambiente ou armazenamento seguro.
- Gire e revogue regularmente os segredos da conta de serviço para manter a segurança.
- Explore adocumentação do Atlas Go SDK,Postman Collection e API para obter mais recursos personalizados para seu caso de uso.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.