본문으로 건너뛰기
언어

@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(",") })
옵션뜻
secrets32자 이상 비밀 목록. 첫 번째로 봉인하고 전부로 엽니다. 교체할 때는 새 비밀을 앞에 넣고, 세션 수명이 지난 뒤 옛 비밀을 뺍니다
saltwebkit-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.