displayed_sidebar: bankingApiSidebar
Onboarding do Parceiro
Este guia apresenta o passo a passo completo para que sua instituição parceira se conecte à Banking API, desde a configuração da infraestrutura até a primeira requisição bem-sucedida.
š VisĆ£o Geralā
O processo de onboarding envolve múltiplas camadas de segurança que devem ser configuradas em ordem:
- Infraestrutura de Rede (VPC, Firewall, etc)
- Certificados mTLS (Mutual TLS)
- Credenciais OAuth2 (Client ID e Client Secret)
- Testes de Conectividade
- Primeira Requisição
šÆ PrĆ©-requisitosā
Antes de comeƧar, certifique-se de que:
- ā VocĆŖ jĆ” implementou os Requisitos de SeguranƧa
- ā VocĆŖ tem um BFF (Backend for Frontend) pronto
- ā VocĆŖ tem um sistema de autenticação funcionando
- ā VocĆŖ tem controle de usuĆ”rios implementado
š Iniciando o Processoā
Para iniciar o processo de onboarding, entre em contato com nossa equipe:
- Email:
[email protected] - Assunto: "Solicitação de Onboarding - Banking API"
- InformaƧƵes necessƔrias:
- Nome da instituição
- CNPJ
- Ambiente desejado (Development, Staging, Production)
- IPs públicos que farão requisições (para whitelist)
š Fase 1: Configuração de Infraestruturaā
1.1 Configuração de Rede (VPC)ā
Nossa API estĆ” protegida por uma VPC (Virtual Private Cloud). VocĆŖ precisarĆ” configurar sua infraestrutura para se conectar.
O que vocĆŖ precisa fornecer:ā
- IPs públicos dos servidores que farão requisições
- CIDR blocks (se aplicƔvel) da sua infraestrutura
- Ambiente (Development, Staging, Production)
O que nós fazemos:ā
- Adicionamos seus IPs Ć whitelist da VPC
- Configuramos rotas de rede
- Fornecemos informaƧƵes de conectividade
Tempo estimado: 2-3 dias Ćŗteisā
1.2 Configuração de Firewallā
Certifique-se de que seu firewall permite conexƵes HTTPS (porta 443) para:
- Development:
api-dev.bancodigital.com - Staging:
api-staging.bancodigital.com - Production:
api.bancodigital.com
Exemplo de regra de firewall:ā
# Permitir saĆda HTTPS para Banking API
iptables -A OUTPUT -p tcp --dport 443 -d api.bancodigital.com -j ALLOW
1.3 Teste de Conectividadeā
Após a configuração da VPC, teste a conectividade:
# Teste bƔsico de conectividade
curl -v https://api.bancodigital.com/gw_banking/healthcheck
# Deve retornar:
# {"status":"ok","timestamp":"2024-11-24T10:00:00Z"}
Nota: Se você receber erro de timeout ou conexão recusada, verifique com nossa equipe se seus IPs foram adicionados corretamente à whitelist.
š Fase 2: Certificados mTLSā
2.1 O que Ć© mTLS?ā
mTLS (Mutual TLS) é uma camada adicional de segurança onde ambas as partes (você e nós) se autenticam usando certificados. Isso garante que apenas parceiros autorizados possam se conectar.
2.2 Solicitação de Certificadosā
Após a configuração da rede, solicite os certificados mTLS:
- Email:
[email protected] - Assunto: "Solicitação de Certificados mTLS - Banking API"
- InformaƧƵes:
- Nome da instituição
- CNPJ
- Ambiente (Development, Staging, Production)
2.3 Recebimento dos Certificadosā
VocĆŖ receberĆ” os seguintes arquivos:
client.crt- Certificado do clienteclient.key- Chave privada do clienteca.crt- Certificado da autoridade certificadora (CA)
ā ļø IMPORTANTE: Mantenha esses arquivos em local seguro. Nunca os commite em repositórios ou os exponha publicamente.
2.4 Armazenamento Seguroā
Opção 1: Secret Manager (Recomendado)ā
// Exemplo: AWS Secrets Manager
import { SecretsManager } from '@aws-sdk/client-secrets-manager';
const secretsManager = new SecretsManager();
async function getCertificate() {
const secret = await secretsManager.getSecretValue({
SecretId: 'banking-api/mtls-cert',
});
return JSON.parse(secret.SecretString);
}
Opção 2: VariĆ”veis de Ambiente (Desenvolvimento)ā
# .env (nunca commitar)
CERT_PATH=/secure/path/to/client.crt
KEY_PATH=/secure/path/to/client.key
CA_PATH=/secure/path/to/ca.crt
Opção 3: Vault (HashiCorp Vault)ā
# Armazenar no Vault
vault kv put secret/banking-api/mtls \
[email protected] \
[email protected] \
[email protected]
2.5 Configuração no BFFā
Node.js (axios)ā
import axios from 'axios';
import https from 'https';
import { readFileSync } from 'fs';
const httpsAgent = new https.Agent({
cert: readFileSync(process.env.CERT_PATH!),
key: readFileSync(process.env.KEY_PATH!),
ca: readFileSync(process.env.CA_PATH!),
});
const bankingApiClient = axios.create({
baseURL: 'https://api.bancodigital.com',
httpsAgent,
});
Python (requests)ā
import requests
cert = ('/path/to/client.crt', '/path/to/client.key')
ca_cert = '/path/to/ca.crt'
response = requests.get(
'https://api.bancodigital.com/public/gw_banking/v1/accounts/123',
cert=cert,
verify=ca_cert,
)
cURL (teste)ā
curl -X GET https://api.bancodigital.com/public/gw_banking/v1/accounts/123 \
--cert client.crt \
--key client.key \
--cacert ca.crt
2.6 Validação do Certificadoā
Teste se o certificado estĆ” funcionando:
# Teste de handshake mTLS
openssl s_client \
-connect api.bancodigital.com:443 \
-cert client.crt \
-key client.key \
-CAfile ca.crt
# Deve mostrar:
# Verify return code: 0 (ok)
Nota: Se você receber erro de "certificate verify failed", verifique se estÔ usando os certificados corretos e se eles não expiraram.
š Fase 3: Credenciais OAuth2ā
3.1 Solicitação de Credenciaisā
Após configurar mTLS, solicite as credenciais OAuth2:
- Email:
[email protected] - Assunto: "Solicitação de Credenciais OAuth2 - Banking API"
- InformaƧƵes:
- Nome da instituição
- CNPJ
- Ambiente (Development, Staging, Production)
- Confirmação de que mTLS estÔ configurado
3.2 Recebimento das Credenciaisā
VocĆŖ receberĆ”:
CLIENT_ID- Identificador único do seu clienteCLIENT_SECRET- Chave secreta para autenticação
ā ļø IMPORTANTE: Mantenha o
CLIENT_SECRETem local seguro. Nunca o exponha no frontend ou em logs.
3.3 Armazenamento Seguroā
# .env (nunca commitar)
CLIENT_ID=seu-client-id-aqui
CLIENT_SECRET=seu-client-secret-aqui
3.4 Configuração no BFFā
// token-manager.ts
class TokenManager {
private token: string | null = null;
private expiresAt: number = 0;
async getToken(): Promise<string> {
// Se o token ainda Ʃ vƔlido, retornar
if (this.token && Date.now() < this.expiresAt - 5 * 60 * 1000) {
return this.token;
}
// Obter novo token
const response = await fetch(
'https://api.bancodigital.com/public/gw_banking/v1/auth/token',
{
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'client_credentials',
client_id: process.env.CLIENT_ID!,
client_secret: process.env.CLIENT_SECRET!,
}),
// Incluir certificados mTLS se configurado
agent: httpsAgent, // Node.js
},
);
if (!response.ok) {
throw new Error(`Falha ao obter token: ${response.statusText}`);
}
const data = await response.json();
this.token = data.access_token;
this.expiresAt = Date.now() + data.expires_in * 1000;
return this.token;
}
}
ā Fase 4: Testes de Conectividadeā
4.1 Teste de Health Checkā
curl -X GET https://api.bancodigital.com/gw_banking/healthcheck \
--cert client.crt \
--key client.key \
--cacert ca.crt
# Resposta esperada:
# {"status":"ok","timestamp":"2024-11-24T10:00:00Z"}
4.2 Teste de Autenticaçãoā
curl -X POST https://api.bancodigital.com/public/gw_banking/v1/auth/token \
--cert client.crt \
--key client.key \
--cacert ca.crt \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=SEU_CLIENT_ID" \
-d "client_secret=SEU_CLIENT_SECRET"
# Resposta esperada:
# {
# "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
# "token_type": "Bearer",
# "expires_in": 3600
# }
4.3 Teste de Requisição com Tokenā
TOKEN="seu-access-token-aqui"
curl -X GET https://api.bancodigital.com/public/gw_banking/v1/accounts/123 \
--cert client.crt \
--key client.key \
--cacert ca.crt \
-H "Authorization: Bearer $TOKEN"
# Deve retornar dados da conta ou erro de autorização se a conta não existir
š Fase 5: Primeira Requisição Completaā
5.1 Exemplo Completo em Node.jsā
import axios from 'axios';
import https from 'https';
import { readFileSync } from 'fs';
// Configurar mTLS
const httpsAgent = new https.Agent({
cert: readFileSync(process.env.CERT_PATH!),
key: readFileSync(process.env.KEY_PATH!),
ca: readFileSync(process.env.CA_PATH!),
});
// Cliente HTTP com mTLS
const client = axios.create({
baseURL: 'https://api.bancodigital.com',
httpsAgent,
});
// Obter token
async function getToken() {
const response = await client.post(
'/public/gw_banking/v1/auth/token',
new URLSearchParams({
grant_type: 'client_credentials',
client_id: process.env.CLIENT_ID!,
client_secret: process.env.CLIENT_SECRET!,
}),
{
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
},
);
return response.data.access_token;
}
// Fazer requisição
async function getBalance(accountId: string) {
const token = await getToken();
const response = await client.get(
`/public/gw_banking/v1/accounts/${accountId}/balance`,
{
headers: {
Authorization: `Bearer ${token}`,
},
},
);
return response.data;
}
// Uso
(async () => {
try {
const balance = await getBalance('123');
console.log('Saldo:', balance);
} catch (error) {
console.error('Erro:', error.response?.data || error.message);
}
})();
5.2 Exemplo Completo em Pythonā
import requests
import os
# Configuração
BASE_URL = 'https://api.bancodigital.com'
CLIENT_ID = os.getenv('CLIENT_ID')
CLIENT_SECRET = os.getenv('CLIENT_SECRET')
CERT = ('/path/to/client.crt', '/path/to/client.key')
CA_CERT = '/path/to/ca.crt'
# Obter token
def get_token():
response = requests.post(
f'{BASE_URL}/public/gw_banking/v1/auth/token',
data={
'grant_type': 'client_credentials',
'client_id': CLIENT_ID,
'client_secret': CLIENT_SECRET,
},
cert=CERT,
verify=CA_CERT,
)
response.raise_for_status()
return response.json()['access_token']
# Fazer requisição
def get_balance(account_id):
token = get_token()
response = requests.get(
f'{BASE_URL}/public/gw_banking/v1/accounts/{account_id}/balance',
headers={'Authorization': f'Bearer {token}'},
cert=CERT,
verify=CA_CERT,
)
response.raise_for_status()
return response.json()
# Uso
if __name__ == '__main__':
try:
balance = get_balance('123')
print('Saldo:', balance)
except Exception as e:
print('Erro:', e)
š Checklist de Onboardingā
Use este checklist para acompanhar seu progresso:
Infraestruturaā
- IPs pĆŗblicos fornecidos Ć equipe ONZ
- IPs adicionados Ć whitelist da VPC
- Conectividade testada (health check)
- Firewall configurado (porta 443)
Certificados mTLSā
- Certificados solicitados
- Certificados recebidos (client.crt, client.key, ca.crt)
- Certificados armazenados de forma segura
- Certificados configurados no BFF
- Handshake mTLS testado e funcionando
Credenciais OAuth2ā
- Credenciais solicitadas
- CLIENT_ID recebido
- CLIENT_SECRET recebido
- Credenciais armazenadas de forma segura
- Token OAuth2 obtido com sucesso
Testesā
- Health check funcionando
- Autenticação OAuth2 funcionando
- Primeira requisição bem-sucedida
- BFF integrado e funcionando
š Troubleshootingā
Erro: "Connection timeout"ā
Causa: IPs não foram adicionados à whitelist da VPC
Solução:
- Verifique se forneceu os IPs corretos
- Entre em contato com
[email protected]para verificar whitelist
Erro: "Certificate verify failed"ā
Causa: Certificado invƔlido ou expirado
Solução:
- Verifique se estĆ” usando os certificados corretos
- Verifique se os certificados não expiraram
- Solicite novos certificados se necessƔrio
Erro: "Invalid client credentials"ā
Causa: CLIENT_ID ou CLIENT_SECRET incorretos
Solução:
- Verifique se as credenciais estão corretas
- Verifique se não hÔ espaços extras
- Solicite novas credenciais se necessƔrio
Erro: "mTLS handshake failed"ā
Causa: Certificado e chave privada não correspondem
Solução:
- Verifique se estĆ” usando o certificado e chave corretos
- Teste com openssl:
openssl x509 -noout -modulus -in client.crt | openssl md5eopenssl rsa -noout -modulus -in client.key | openssl md5(devem ser iguais)
š Suporteā
Durante o processo de onboarding, nossa equipe estĆ” disponĆvel para ajudar:
- Email:
[email protected] - Assunto: "Onboarding - [Nome da Instituição]"
- Tempo de resposta: 24-48 horas Ćŗteis
š Próximos Passosā
Após concluir o onboarding:
- Getting Started - Explore a API
- Balance Flow - Entenda o fluxo de saldo
- Account Management - Gerencie contas
- Errors & Retries - Trate erros adequadamente
displayed_sidebar: bankingApiSidebar
Ćltima Atualização: 2024-11-24
Versão: 1.0.0