@plott/webkit-auth-session-cookie0.4.0
@plott/webkit-auth 세션 저장소 — 세션을 JWE(dir + A256GCM)로 봉인해 쿠키에 담는다(stateless, 비밀 교체 지원)
설치
pnpm
pnpm add @plott/webkit-auth-session-cookie@0.4.0진입점(exports)
| import | 타입 | 파일 |
|---|---|---|
@plott/webkit-auth-session-cookie | ./dist/index.d.ts | ./dist/index.js |
@plott/webkit-auth 의 SessionStore 구현입니다. 세션 전체를 JWE(dir + A256GCM)로 봉인해 쿠키 값으로 씁니다. 서버 저장소가 없습니다(stateless).
진입점
| 진입점 | 실행 위치 | 내보내는 것 |
|---|---|---|
@plott/webkit-auth-session-cookie | 서버(Node, Edge) | cookieSession, seal, unseal, assertSecrets, 타입 CookieSessionOptions |
붙이기
ts
import { cookieSession } from "@plott/webkit-auth-session-cookie";
sessionStore: cookieSession({ secrets: process.env.AUTH_SECRETS!.split(",") })| 옵션 | 뜻 |
|---|---|
secrets | 32자 이상 비밀 목록. 첫 번째로 봉인하고 전부로 엽니다. 교체할 때는 새 비밀을 앞에 넣고, 세션 수명이 지난 뒤 옛 비밀을 뺍니다 |
salt | webkit-auth |
cookieSession 이 돌려주는 저장소는 encode/decode(세션 용도)와 seal/unseal(용도 지정)을 가집니다. destroy 는 없습니다.
seal(payload, secrets, purpose, maxAgeSeconds, salt?) 는 compact JWE 문자열을 돌려주고, unseal(token, secrets, purpose, salt?) 는 페이로드 또는 null 을 돌려줍니다. purpose 는 "session" 또는 "tx" 입니다.
기본으로 지키는 것
- 용도(세션·로그인 트랜잭션)마다 키를 따로 유도합니다. 트랜잭션 쿠키를 세션 자리에 끼워 넣을 수 없습니다.
- 키는 비밀에서 HKDF-SHA256(기본 salt
webkit-auth, info<용도>/A256GCM)으로 유도합니다. - 비밀이 없거나 32자보다 짧으면
cookieSession을 만들 때, 그리고seal을 부를 때@plott/webkit-auth-session-cookie:로 시작하는 오류로 멈춥니다. 약한 키로 봉인하지 않습니다. - 열지 못하는 값(위조·변조·만료·모르는 키·쿠키가 아닌 문자열)은 예외 없이
null입니다. 깨진 쿠키는 «세션 없음»입니다. - 만료는 5초의 시계 오차를 허용합니다.
kid가 맞는 키를 먼저 시도하고 나머지 키도 모두 시도합니다.kid가 없는 값도 열립니다.cookieSession은 받은secrets배열을 복사합니다. 만든 뒤 배열을 바꿔도 저장소는 바뀌지 않습니다.- «서버에서 즉시 끊기»는 발급자의 리프레시 토큰 폐기로 합니다. 즉시 끊기가 필요하면 같은 포트의 서버 저장소 구현으로 바꿉니다.
그 밖
의존성: jose. peer: @plott/webkit-auth.