Segurança de APIs: Protegendo Dados com OAuth e OpenID Connect
Entenda como os protocolos OAuth e OpenID Connect (OIDC) garantem a segurança de APIs financeiras, protegendo dados sensíveis e autenticando usuários.

A digitalização do setor financeiro é impulsionada pela comunicação entre sistemas através de Interfaces de Programação de Aplicativos (APIs). Estas APIs são as pontes que conectam bancos, fintechs e provedores de serviços de pagamento, viabilizando ecossistemas complexos como o Open Finance. Contudo, essa interconectividade expande exponencialmente a superfície de ataque, tornando a segurança de APIs o pilar fundamental para a integridade e a confiança de todo o mercado financeiro. A gestão de acesso e a verificação de identidade se tornam, portanto, processos críticos que exigem padrões robustos e testados em escala global.
Por que a segurança de APIs é crítica no setor financeiro?
A segurança de APIs é crítica no setor financeiro porque elas são os canais diretos para a transação e o acesso a dados extremamente sensíveis, como informações pessoais, saldos de contas, históricos de transações e credenciais de pagamento. Uma falha na segurança de uma API financeira não resulta apenas em perda de dados, mas pode levar a perdas financeiras diretas para clientes e instituições, danos irreparáveis à reputação e sanções regulatórias severas. Órgãos como o Banco Central do Brasil (BACEN) e a legislação, como a Lei Geral de Proteção de Dados (LGPD - Lei nº 13.709/2018), impõem requisitos rigorosos sobre como esses dados devem ser protegidos, tanto em repouso quanto em trânsito.
No contexto do Open Finance Brasil, que, segundo dados do BACEN, já registrou mais de 40 milhões de consentimentos ativos de clientes, a escala da exposição é massiva. Cada consentimento representa um fluxo de dados autorizado via API. Sem um modelo de segurança padronizado e forte, como o definido pelo Financial-grade API Profile (FAPI), seria inviável garantir que apenas as partes autorizadas, para os fins consentidos e durante o período acordado, pudessem acessar as informações. A violação de uma única API em um ecossistema interconectado pode gerar um efeito cascata, comprometendo múltiplos participantes e minando a confiança do consumidor na inovação financeira.
O que é o OAuth e qual problema ele resolve?
OAuth 2.0 é um framework de autorização, e não de autenticação, padronizado pela IETF (Internet Engineering Task Force) na RFC 6749. Ele resolve o problema fundamental do acesso delegado, permitindo que um aplicativo de terceiros (um "cliente") acesse recursos hospedados em um servidor (um "servidor de recursos") em nome do proprietário desses recursos (o "dono do recurso"), sem que este último precise compartilhar suas credenciais (usuário e senha) com o aplicativo.
Antes do OAuth, uma prática comum era o "anti-padrão" de solicitar ao usuário seu login e senha de outro serviço para poder acessá-lo. Por exemplo, um aplicativo de agregação financeira pediria suas credenciais bancárias. Isso é extremamente inseguro, pois o aplicativo de terceiros ganha acesso total e perpétuo às suas informações, podendo armazenar suas credenciais de forma insegura e agir em seu nome sem qualquer restrição. O OAuth soluciona isso ao introduzir um fluxo onde o usuário concede permissões específicas e limitadas (escopos) a um aplicativo. O resultado desse fluxo é um "token de acesso", uma chave temporária com poderes limitados que o aplicativo usa para acessar a API em nome do usuário, em vez da senha do usuário.
Como funciona o fluxo de autorização do OAuth 2.0?
O fluxo de autorização mais comum e seguro no OAuth 2.0 é o "Authorization Code Grant Flow". Ele funciona através da interação de quatro papéis distintos: o Dono do Recurso (o usuário final), o Cliente (a aplicação que deseja o acesso), o Servidor de Autorização (que verifica a identidade do usuário e emite os tokens) e o Servidor de Recursos (a API que hospeda os dados). O processo ocorre em várias etapas:
- Iniciação: O Cliente redireciona o Dono do Recurso para o Servidor de Autorização, incluindo parâmetros como o
client_id(identificador da aplicação),scope(as permissões solicitadas), eredirect_uri(para onde o usuário deve retornar após a autorização). - Consentimento do Usuário: O Servidor de Autorização autentica o Dono do Recurso (pede login e senha do banco, por exemplo) e apresenta a ele a solicitação de permissão do Cliente. O usuário pode aprovar ou negar.
- Geração do Código de Autorização: Se aprovado, o Servidor de Autorização redireciona o usuário de volta ao Cliente (no
redirect_uriinformado) com um "código de autorização" temporário. Este código é de curta duração e de uso único. - Troca do Código por Tokens: O Cliente, de forma segura em seu backend (sem exposição ao navegador do usuário), contata diretamente o Servidor de Autorização. Ele apresenta o código de autorização recebido, junto com seu
client_ideclient_secret(uma "senha" da aplicação), para provar sua identidade. - Emissão dos Tokens: O Servidor de Autorização valida o código e as credenciais do cliente. Se tudo estiver correto, ele emite um
access_token(token de acesso) e, opcionalmente, umrefresh_token(token de atualização). - Acesso ao Recurso: O Cliente utiliza o
access_tokenpara fazer chamadas ao Servidor de Recursos (a API) e obter os dados autorizados pelo usuário. O Servidor de Recursos valida oaccess_tokena cada chamada antes de responder.
Este fluxo garante que as credenciais do usuário nunca sejam expostas ao Cliente e que o access_token, a peça mais sensível, transite por um canal seguro (back-channel) entre o Cliente e o Servidor de Autorização.
Tabela Comparativa de Grant Types do OAuth 2.0
O OAuth 2.0 define diferentes "grant types" (tipos de concessão) para cenários de uso distintos. A escolha do grant type correto é crucial para a segurança.
| Grant Type | Cenário de Uso Principal | Nível de Segurança | Comentários |
|---|---|---|---|
| Authorization Code | Aplicações web com backend (servidor confidencial) | Alto | Padrão ouro. Recomendado para a maioria dos casos. Obrigatório uso de PKCE em clientes públicos. |
| Implicit | Aplicações de página única (SPA) e móveis (legado) | Baixo | Considerado obsoleto e inseguro. O access_token é exposto no navegador. Substituído pelo Authorization Code com PKCE. |
| Client Credentials | Comunicação máquina-a-máquina (M2M), sem intervenção do usuário. | Alto | Usado quando a própria aplicação é a dona do recurso (ex: um serviço de batch processando dados internos). |
| Resource Owner Password Credentials (ROPC) | Aplicações próprias e altamente confiáveis (legado) | Muito Baixo | Fortemente desaconselhado. Exige que o cliente colete as credenciais do usuário, quebrando o princípio do OAuth. |
| Refresh Token | Obter um novo access_token sem re-autenticação do usuário. | N/A | Não é um grant type inicial, mas um mecanismo para renovar tokens de acesso expirados. Crucial para a experiência do usuário. |
O que é o OpenID Connect (OIDC) e como ele se diferencia do OAuth?
OpenID Connect (OIDC) é uma camada de identidade simples construída sobre o framework de autorização OAuth 2.0. Enquanto o OAuth 2.0 responde à pergunta "O que esta aplicação tem permissão para fazer em seu nome?" (autorização), o OIDC responde à pergunta "Quem é você?" (autenticação). Ele permite que clientes verifiquem a identidade de um usuário final com base na autenticação realizada por um Servidor de Autorização, bem como obtenham informações básicas de perfil sobre eles de maneira interoperável e semelhante a REST.
A principal diferença é o propósito e o artefato retornado. O OAuth 2.0 fornece um access_token, que é um valor opaco para o cliente, destinado a ser consumido pela API (Servidor de Recursos). O OIDC, por sua vez, adiciona um novo artefato ao fluxo OAuth 2.0: o ID Token. O ID Token é um JSON Web Token (JWT) que contém "claims" (afirmações) sobre o evento de autenticação, como o identificador único do usuário, quem o autenticou (o emissor do token), para qual cliente ele foi emitido, e quando a autenticação expira. Como o ID Token é um JWT, ele é assinado digitalmente pelo emissor, permitindo que o cliente verifique sua autenticidade e integridade sem precisar contatar o servidor novamente. Em resumo: OAuth 2.0 é para delegar acesso a APIs; OIDC é para delegar a autenticação do usuário.
Qual a aplicação prática de OAuth e OIDC no Open Finance Brasil?
A aplicação de OAuth 2.0 e OIDC no Open Finance Brasil é mandatória e central para todo o funcionamento do ecossistema, conforme definido nos Padrões Técnicos publicados pelo BACEN. Eles são a espinha dorsal do "gerenciamento de consentimento". Quando um cliente (usuário) em um aplicativo de uma fintech (Iniciador de Pagamento ou Instituição de Terceiros - TPP) deseja, por exemplo, visualizar o extrato de sua conta em um banco tradicional (Detentor de Conta - ASPSP), o fluxo é orquestrado por esses protocolos.
Na prática, o processo segue o fluxo de Autorização com OIDC:
- A fintech (Cliente) direciona o usuário para o portal do banco (Servidor de Autorização).
- O banco autentica seu cliente. Este passo é o OIDC em ação, confirmando a identidade do usuário.
- Após a autenticação, o banco apresenta a tela de consentimento, detalhando quais dados a fintech está solicitando (ex: "Acesso ao saldo e extrato da conta corrente") e por quanto tempo. Este é o OAuth 2.0 em ação, definindo os
scopesda autorização. - Com a aprovação do usuário, o banco gera o código de autorização, que a fintech troca por um
access_tokene umID Token. - O
ID Tokenprova para a fintech que o usuário autenticado no banco é o mesmo que iniciou a jornada em seu aplicativo. - O
access_tokené usado pela fintech para chamar a API de extrato do banco. O token contém os escopos e a validade da permissão concedida.
Este modelo, especificamente o perfil FAPI (Financial-grade API), que é um conjunto de regras mais rígidas sobre OIDC e OAuth 2.0, garante um altíssimo nível de segurança, rastreabilidade e interoperabilidade, permitindo que mais de 800 instituições participantes do Open Finance Brasil se comuniquem de forma padronizada e segura.
Quais são as melhores práticas para implementar OAuth e OIDC com segurança?
Implementar OAuth 2.0 e OIDC de forma segura exige atenção a detalhes que vão além da especificação básica, especialmente em ambientes de alto risco como o financeiro. Aderir a perfis como o FAPI já engloba muitas dessas práticas.
A lista de melhores práticas inclui:
- Utilizar o Authorization Code Grant com PKCE: O PKCE (Proof Key for Code Exchange, RFC 7636) é uma extensão que previne ataques de interceptação do código de autorização, sendo essencial para clientes públicos como aplicativos móveis e SPAs (Single Page Applications).
- Validação rigorosa de Redirect URIs: O Servidor de Autorização deve manter uma lista de
redirect_urispré-registrados para cada cliente e rejeitar qualquer solicitação que não corresponda exatamente a um item da lista. Isso previne que códigos e tokens sejam enviados para um atacante. - Uso de Escopos Granulares e Princípio do Menor Privilégio: Conceda apenas as permissões estritamente necessárias para a funcionalidade desejada (
scopes). Evite escopos genéricos que dão acesso amplo e desnecessário. A LGPD reforça essa necessidade no seu princípio da necessidade (Art. 6º, III). - Tokens de Acesso de Curta Duração:
Access_tokensdevem ter um tempo de vida curto (ex: 5 a 15 minutos). Isso limita a janela de oportunidade para um atacante caso o token seja comprometido. A experiência do usuário é mantida através do uso derefresh_tokens. - Segurança dos Refresh Tokens:
Refresh_tokenssão poderosos e de longa duração. Eles devem ser armazenados de forma segura pelo cliente, ser de uso único (rotação de refresh tokens) e ser revogáveis imediatamente em caso de suspeita de fraude. - Validação de Assinaturas de JWT: Sempre valide a assinatura digital dos
ID Tokens(e deaccess_tokensestruturados como JWT) usando a chave pública do emissor para garantir sua autenticidade e integridade. - TLS em Tudo: Toda a comunicação entre as partes (cliente, servidor de autorização, servidor de recursos) deve ser criptografada utilizando versões atualizadas e seguras do TLS (Transport Layer Security), como o TLS 1.2 ou superior.
A adoção dessas práticas não é opcional, mas um requisito para construir sistemas financeiros digitais que sejam ao mesmo tempo inovadores, abertos e, acima de tudo, confiáveis.
FAQ — Perguntas Frequentes
Autenticação é o processo de verificar quem um usuário é (identidade). Geralmente envolve a apresentação de credenciais como senha, biometria ou um segundo fator. Autorização é o processo de verificar o que um usuário autenticado tem permissão para fazer (privilégios). O OIDC é focado em autenticação, enquanto o OAuth 2.0 é focado em autorização.
O OAuth 2.0 é um framework flexível e, em sua configuração padrão, pode não ser suficiente. Para aplicações bancárias, é crucial implementar perfis de segurança mais rigorosos sobre o OAuth 2.0, como o FAPI (Financial-grade API). O FAPI impõe regras mais estritas, como o uso obrigatório de PKCE, algoritmos de criptografia fortes e fluxos de autenticação mútua (mTLS), tornando-o adequado para o alto risco do setor financeiro.
JWT (RFC 7519) é um padrão aberto para criar tokens que propagam "claims" (afirmações) entre duas partes de forma segura. Um JWT é um objeto JSON compacto e autossuficiente, que pode ser assinado digitalmente ou criptografado. No contexto de OIDC, o `ID Token` é um JWT que contém claims sobre a identidade do usuário e o evento de autenticação. `Access tokens` também podem ser JWTs, carregando informações sobre escopos e validade.
Sim. O framework OAuth 2.0 prevê a revogação de tokens. O usuário (Dono do Recurso) deve ter uma interface em seu provedor de serviços (ex: no internet banking) onde possa visualizar todos os aplicativos de terceiros autorizados e revogar o acesso de qualquer um deles a qualquer momento. Além disso, o próprio cliente pode solicitar a revogação de um token que ele não precisa mais, e o Servidor de Autorização pode revogar tokens por razões de segurança. Isso está previsto na RFC 7009 (OAuth 2.0 Token Revocation).