한 겹이 뚫려도, 다섯 겹이 버팁니다.
6계층 방어. 각 계층이 독립적으로 위협을 차단합니다. 로그인 절차부터 감사 기록까지, 한 겹이 뚫려도 나머지 다섯 겹이 막습니다.
로그인 절차가 첫 번째 관문입니다.
로그인 인가 절차에 탈취 방지 기술(PKCE)을 강제합니다. 인가 요청을 서버에 미리 등록(PAR)하고, 발급한 토큰을 기기에 암호로 묶습니다(DPoP).
// PKCE S256 challenge
const verifier = crypto.randomUUID();
const challenge = base64url(
await crypto.subtle.digest("SHA-256", encode(verifier))
);비밀번호를 넘어선 검증.
비밀번호를 안전하게 암호화(bcrypt)하고, 로그인마다 전 세계 유출 비밀번호 DB(HIBP)와 실시간 대조합니다. 반복 실패 시 자동 잠금으로 무차별 대입 공격을 차단합니다.
// HIBP breach check on sign-in const hash = sha1(password).slice(0, 5); const breached = await hibp.check(hash); if (breached) throw new BreachedPasswordError();
토큰은 훔쳐도 쓸 수 없습니다.
접속 토큰은 위조할 수 없게 서명(ES256)됩니다. 갱신 토큰은 쓸 때마다 교체되고, 발급한 기기에만 묶입니다(DPoP).
// DPoP-bound token verification
const { payload } = await jwtVerify(token, publicKey);
const dpopProof = request.headers.get("DPoP");
verifyDPoPBinding(payload.cnf, dpopProof);세션은 기기에 묶입니다.
세션을 기기 지문에 묶습니다. 미사용 만료(7일)와 최대 수명 만료를 따로 관리합니다.
// Device fingerprint validation
const fp = generateFingerprint(request);
if (session.deviceFp !== fp) {
await revokeSession(session.id);
throw new SessionHijackError();
}네트워크 경계에서 차단합니다.
데이터베이스 기반의 정확한 요청 속도 제한. IP 정책(허용/차단 대역), 도메인 출처 제한, 조직별 실시간 출처 확인.
// Atomic rate limit check (D1 batch)
const [insert, count] = await db.batch([
db.prepare("INSERT INTO rate_limit ..."),
db.prepare("SELECT COUNT(*) ...")
]);
if (count > threshold) throw new RateLimitError();모든 활동이 기록됩니다.
55가지 이벤트를 기록하고 웹훅으로 전달합니다. 실시간 보안 신호(SSF)로 보안 이벤트를 연동 앱에 즉시 전파합니다.
// CAEP/SSF event propagation
await emitSecurityEvent({
type: "session-revoked",
subject: userId,
reason: "credential_change"
}); // -> all subscribed apps보안이 해결된 인증을 시작하세요.
6계층 방어가 내장된 인증으로 전환하세요. SDK 한 줄로 즉시 활성화.