Um serviço auth que emite JWTs RS256 e um Spring Cloud Gateway que os valida uma única vez
auth
Hoje qualquer um consegue apagar eventos do catálogo. Cada serviço deveria aprender a conferir senhas?
exp
/auth/.well-known/jwks.json
kid
Assinado ≠ criptografado: qualquer um lê o payload.
{ "iss": "boxoffice-auth", "aud": "boxoffice", "sub": "0b9d8a6e-…", "email": "ana@example.com", "scope": "user", "iat": 1795000000, "exp": 1795003600 }
iss
aud
scope
SCOPE_user
SCOPE_admin
POST /auth/register
POST /auth/login
401
GET /auth/me
X-User-Id
ADMIN_EMAIL
ADMIN_PASSWORD
routes: - id: auth uri: http://auth:8081 predicates: [ Path=/auth/** ] - id: catalog uri: lb://catalog # catalog-1..3, health-checked predicates: [ Path=/catalog/** ]
.pathMatchers("/auth/register", "/auth/login", "/auth/.well-known/**").permitAll() .pathMatchers(HttpMethod.GET, "/catalog/**").permitAll() .pathMatchers("/catalog/**").hasAuthority("SCOPE_admin") .anyExchange().authenticated()
403
X-User-*
X-User-Email
X-User-Scope
O que muda em uma rede zero trust?
fans ─► edge (Nginx) ─► gateway (×N) ─► lb://catalog ─► catalog-1..3 balances gateways balances service instances
# k6 inside the compose network: catalog replicas publish no port docker run --rm -i --network boxoffice_default -v "$PWD":/w -w /w \ grafana/k6 run -e RATE=50 load/gateway.js
/auth/login
for r in 5 10 20 40; do k6 run -q -e RATE=$r --summary-export results/lab4/rate-$r.json load/login.js; done
Roteiro: (1) autenticação vs autorização; (2) sessões vs JWT; (3) RS256 e JWKS; (4) serviço auth; (5) rotas e LB do gateway; (6) regras de segurança; (7) headers de identidade; (8) medições: salto, JWT, login.