Archived
四项校验顺序即安全要点:algorithms 写死 RS256(绝不读 token header 的 alg,否则 alg:none 可绕过)、issuer、audience、clockTolerance 30 秒;jose 的错误经 explainJoseError 翻成人话后包成 TokenRejectedError,排错省时间。测试用 createLocalJWKSet 造本地 JWKS 当 Keycloak 替身,不联网,验签逻辑本身走同一个 jwtVerify。zod 的 .optional() 与本仓 exactOptionalPropertyTypes 有摩擦, 按 claims.ts::identityOf 已有的手法(undefined 就不带键)加了 toVerifiedClaims 做收窄,详见 task-3-report.md。