Archived
org adapter:jose 验签 —— RS256 写死、校 iss/aud、30s 容差、错误译人话(ADR-012;新依赖 jose,用户已批)
四项校验顺序即安全要点: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。
This commit is contained in:
@@ -18,3 +18,5 @@ export { identityOf, isNoiseRole, normalizeRoles } from './internal/domain/claim
|
||||
export { assertNotLockedOut, endsOf, normalizeEnds } from './internal/domain/ends.ts';
|
||||
export { buildInFlightWork } from './internal/domain/in-flight.ts';
|
||||
export { DEFAULT_ROLE_ACCESS, NONE_POSITION_CODE, TEST_POSITION_CODE } from './internal/domain/seed-data.ts';
|
||||
export { createKeycloakTokenVerifier, explainJoseError } from './internal/adapter/keycloak-token-verifier.ts';
|
||||
export type { KeycloakVerifierOptions } from './internal/adapter/keycloak-token-verifier.ts';
|
||||
|
||||
Reference in New Issue
Block a user