Pular para o conteúdo

apps/security/federated-identity

154 · Segurança & Auditoria · ≈ 6 min de estudo

Federated Identity

Delega a autenticação ao dono da identidade: o cliente faz login e dá consentimento no próprio banco (identity provider), e a fintech (relying party) recebe só um token com escopo, prazo e revogável — nunca a senha. É o authorization code flow do OAuth 2 com PKCE, base do Open Finance.

passos
6
arquivos
8
testes
0
tecnologias
5
Infraestrutura realTypeScriptBunElysiaPostgreSQLDocker
Baixar cartão

Cenário

Uma fintech quer listar as contas de um cliente em outro banco. O cliente entra no banco com a própria senha e aprova só accounts:read. A fintech lê as contas e recebe 403 ao pedir saldos, que não foram consentidos. Um code apresentado de novo (sinal de vazamento) é recusado e revoga o token emitido com ele. Quando o cliente revoga o consentimento no banco, o token da fintech para de funcionar na hora.

Planta

Sequência
10/10
GET /connect1302 para /authorize (state, code_challenge S256)2GET /authorize com a sessão do banco3tela de consentimento: accounts:read4POST /consents/:id aprovar5302 para /callback?code&state6GET /callback7POST /token (code, client_secret, code_verifier)8access_token com escopo accounts:read9GET /open-finance/accounts (Bearer)10Navegador do clienteFintech (relying party)Banco (identity provider)
10

10 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Login delegado a um provedor externo.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    A fintech gera state e um code_verifier, e manda o navegador ao banco só com o code_challenge (S256)

  2. 02

    O banco exige a sessão do cliente, confere redirect_uri exata e escopos dentro do cadastro do cliente OAuth; URI desconhecida recebe erro, nunca redirect

  3. 03

    O consentimento é gravado com escopos e validade; o code vale 60 s e é guardado só como hash

  4. 04

    A fintech confere o state e troca o code servidor a servidor com client_secret e code_verifier

  5. 05

    O banco queima o code num único UPDATE; segunda apresentação devolve invalid_grant e revoga os tokens dele

  6. 06

    Cada rota de dados exige um escopo; token vencido, revogado ou de consentimento revogado recebe 401

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • A fintech nunca vê a senha do cliente

  • Consentimento por escopo, com prazo e revogável pelo cliente

  • PKCE impede que um code interceptado seja trocado

  • Replay do code é detectado e corta o acesso

Custos

  • Fluxo com mais saltos que um login direto

  • Depende da disponibilidade do banco para cada nova conexão

  • O token opaco exige consulta ao banco a cada acesso

  • Revogação imediata exige checar o consentimento em toda requisição

apps/security/federated-identity

8 arquivos

src/

  • idp_bank.tsBanco: login, authorize, consentimento, token, revogação e dados por escopo
  • idp_flow.tsSessões, pedidos de consentimento e emissão do code
  • idp_token.tsTroca do code com queima atômica, validação e revogação de token
  • pkce_oauth.tsPKCE S256, comparação de segredo por hash e regra de escopos
  • fintech_rp.tsFintech: início do fluxo, callback com state e uso do token
  • config_federation.tsConfiguração validada do ambiente
  • demo.tsdemoConexão, escopo negado, replay do code e revogação

sql/

  • 01_schema.sqlschemaClientes, cadastro OAuth, consentimentos, codes e tokens como hash, contas

Executar · com Docker

  1. ./docker.sh up# sobe PostgreSQL
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
PostgreSQL

Por que se relacionam

Teste rápido

Qual é o próximo passo depois de Federated Identity?

Próximo projeto · Padrões de Design de ServiçoSidecar
Esc

↑ ↓ navegarEnter abrir191 resultados