Autenticação
A API IORQ usa OAuth 2.0 client_credentials. Você troca um client_id + client_secret por um Bearer JWT com validade de 1 hora e passa o token no header Authorization de cada chamada operacional. Sem sessões, sem cookies, sem refresh tokens.
POST /oauth2/token · OAuth 2.0 · JWT
1. Modelo de autenticação
A IORQ adota OAuth 2.0 client_credentials sobre Amazon Cognito — o fluxo apropriado para integrações server-to-server. Não há usuário final no caminho, não há autorização explícita por consentimento. As credenciais identificam a aplicação cliente do integrador; as permissões e os fundos acessíveis são resolvidos pela IORQ a partir do client_id.
sequenceDiagram
participant INT as Integrador
participant AUTH as IORQ Auth (Cognito)
participant API as IORQ API
INT->>AUTH: POST /oauth2/token (client_id + client_secret)
AUTH-->>INT: access_token (JWT, exp=1h)
loop Por até 1h
INT->>API: Chamada operacional (Bearer access_token)
API-->>INT: Resposta
end
Note over INT,AUTH: Após expiração, repete o /oauth2/token
2. Obter um token
2.1 POST /oauth2/token
POST /oauth2/tokenPOST /oauth2/token · application/x-www-form-urlencoded
Parâmetros (form-encoded)
| Campo | Obrigatório | Descrição |
|---|---|---|
grant_type | sim | Sempre client_credentials |
client_id | sim | Identificador da aplicação, fornecido pela IORQ |
client_secret | sim | Secret correspondente. Trate como senha — não exponha em logs, repositórios ou frontend |
scope | não | Opcional. Escopo Cognito do resource server (ex.: cerberus-m2m/read). A autorização efetiva por endpoint é feita pela IORQ a partir do client_id, não pelo escopo |
Exemplo:
curl -X POST 'https://auth.iorq.com.br/oauth2/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=client_credentials' \
-d 'client_id=YOUR_CLIENT_ID' \
-d 'client_secret=YOUR_CLIENT_SECRET'Resposta:
{
"access_token": "eyJraWQiOiJyc2EtMjAyNiIsImFsZyI6IlJTMjU2In0...",
"token_type": "Bearer",
"expires_in": 3600
}2.2 Usar o token
Inclua o token no header Authorization de toda chamada operacional. O prefixo Bearer é obrigatório (com espaço). Lembre que as rotas operacionais ficam sob o prefixo /api.
curl 'https://hs-receiver-app-production.iorq.com.br/api/loan/?originator_proposal_code=OP-001' \
-H 'Authorization: Bearer eyJraWQiOiJyc2EtMjAyNiIs...'3. Ciclo de vida do token
- Validade: 1 hora (
expires_in: 3600). O claimexpdentro do JWT é a fonte da verdade — use-o para programar renovação proativa. - Renovação: não há refresh token. Para renovar, basta chamar
POST /oauth2/tokennovamente com as mesmas credenciais. - Revogação: não há endpoint público. Em caso de comprometimento, contate a IORQ para revogar o
client_secret— o token deixa de ser aceito imediatamente. - Múltiplos tokens válidos: permitido. Você pode emitir tokens em paralelo para escalar — não há limite enforced por essa via.
Padrão recomendadoMantenha um cache em memória do token e renove proativamente quando faltar menos de 5 minutos para expirar. Isso evita uma rajada de
401quando o token expira no meio de um lote de cessões.
4. Anatomia do JWT
O access_token é um JWT (RFC 7519) emitido e assinado (RS256) pelo Amazon Cognito. A chave pública fica no JWKS do user pool Cognito:
https://cognito-idp.us-east-1.amazonaws.com/USER_POOL_ID/.well-known/jwks.json
Claims relevantes
| Claim | Significado |
|---|---|
sub / client_id | Identificador da aplicação cliente (em tokens M2M, client_id == sub) |
scope | Escopo Cognito do resource server (ex.: cerberus-m2m/read) |
token_use | access |
exp | Timestamp UNIX de expiração |
iat | Timestamp UNIX de emissão |
iss | Emissor — o URL do user pool Cognito |
Partner e fundos não vêm no tokenO parceiro (
id_partner) e os fundos/credit vehicles acessíveis não são claims do JWT. Eles são resolvidos pela IORQ a cada chamada, a partir doclient_id, pelo serviço de autorização (Cerberus). Você não precisa verificar a assinatura do token — a IORQ valida do lado dela.
5. Segurança do client_secret
client_secret- Armazene o
client_secretem cofre de credenciais (AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager). Nunca em repositório, build artifact ou variável de ambiente em plain text. - Rotacione o secret pelo menos a cada 12 meses. Em caso de qualquer suspeita, rotacione imediatamente — a IORQ emite secrets sob demanda.
- Não use o secret no frontend. O fluxo client_credentials é exclusivamente server-side.
- Restrinja o acesso ao secret aos serviços que efetivamente chamam
/oauth2/token. Cada serviço que precisa de token deve ter sua própria credencial.
6. Erros de autenticação
| HTTP | Causa | O que fazer |
|---|---|---|
400 | grant_type ausente ou diferente de client_credentials | Corrigir o payload da chamada a /oauth2/token |
401 em /oauth2/token | client_id ou client_secret inválido | Verificar credenciais; rotacionar se necessário |
401 em chamada operacional | Token expirado, malformado ou ausente | Renovar via /oauth2/token e refazer |
403 | Token válido, mas o client_id não tem permissão para o endpoint, ou o fund_id está fora dos fundos provisionados | Revisar permissões/fundos contratados; contatar IORQ |
429 | Excesso de chamadas a /oauth2/token | Cachear o token até próximo do exp antes de renovar |
