Class FirebaseIdTokenValidator
java.lang.Object
br.com.xadm.comum.seguranca.FirebaseIdTokenValidator
@Singleton
@Requires(property="auth.firebase-project-id",
pattern=".+")
public class FirebaseIdTokenValidator
extends Object
Valida Firebase ID Tokens via JWKS público do Google.
Bean condicional: instanciado apenas se auth.firebase-project-id estiver
configurado. Quando ausente, o login Firebase fica desabilitado. O gate pattern = ".+"
reprova a property ausente e a declarada-vazia; notEquals = "" deixaria o bean
subir com ela ausente, e o init() estouraria na primeira resolução.
Cache JWKS: respeita Cache-Control: max-age da resposta; fallback de 1h. Se o
Google estiver indisponível mas o cache existir, usa o cache (stale fallback). Se o cache
estiver vazio e o Google indisponível, lança AuthException com code
"jwks_unavailable".
Validações: assinatura RS256, iss, aud, exp com clock-skew de
60s.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordClaims extraídos de um Firebase ID Token válido. -
Constructor Summary
ConstructorsConstructorDescriptionFirebaseIdTokenValidator(AuthSettings settings) Cria o validador com relógio do sistema. -
Method Summary
Modifier and TypeMethodDescriptionvoidpreloadCacheForTesting(com.nimbusds.jose.jwk.JWKSet jwks, Instant expiresAt) Para uso em testes — pré-popula o cache sem HTTP.Valida o Firebase ID token.
-
Constructor Details
-
FirebaseIdTokenValidator
Cria o validador com relógio do sistema.- Parameters:
settings- configurações de auth.
-
-
Method Details
-
validate
Valida o Firebase ID token. Verifica assinatura RS256,iss,aud,exp(com clock-skew de 60s).- Parameters:
token- o Firebase ID token recebido do cliente.- Returns:
- os claims extraídos (uid, email, name).
- Throws:
AuthException- code"invalid_token"para falhas de validação;"jwks_unavailable"se o JWKS do Google não puder ser obtido.
-
preloadCacheForTesting
Para uso em testes — pré-popula o cache sem HTTP.- Parameters:
jwks- o conjunto de chaves a injetar no cache.expiresAt- instante de expiração do cache.
-