일회용 이메일 링크의 생성·만료·소비 계약을 저장소, 메일 발송기와 분리합니다.
매직 링크는 이메일로 보낸 고엔트로피 일회용 토큰으로 비밀번호 없이 사용자를 확인합니다. 링크 원문은 한 번만 노출하고, 서버에는 토큰의 검증값과 만료 시각, 소비 여부만 저장하는 것이 기본 구성입니다.
사용자 정보를 담지 않은 충분히 긴 무작위 값을 만들어 추측과 정보 노출을 막습니다.
검증과 소비를 하나의 원자적 작업으로 처리해, 같은 링크로 두 번 인증하지 못하게 합니다.
토큰 원문이 아니라 검증용 digest를 보관해, 저장소가 유출돼도 링크를 바로 쓸 수 없게 합니다.
아래 증명은 글로 된 설명이 아닙니다. 버튼을 누르면 이 서버가 지금 직접 계산합니다.
링크를 요청한 브라우저는 토큰을 받지 못합니다. 메일함에 접근할 수 있는 사람만 링크를 손에 넣습니다. 저장소에는 이메일 원문 대신 가명이 남으므로, 저장소가 유출돼도 수신자를 알아낼 수 없습니다.
표준 문서에 실린 테스트 벡터를 그대로 넣어 같은 값이 나오는지 확인합니다.
한 번 쓴 링크는 바로 무효가 됩니다. 나중에 메일함이 털려도 지난 링크로는 들어올 수 없습니다. 복귀 경로는 해석한 결과가 같은 origin 안에 머무는 로컬 경로만 허용해서, 로그인 직후 외부 사이트로 넘어가는 open redirect를 막습니다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 먼저 실었습니다. 사례는 이 분야에서 실제로 보안이 뚫린 일을 다룬 자료입니다.
일회용 링크의 수명과 소비, 열거 방지를 어떻게 설계하는지 다룹니다.
토큰의 엔트로피를 어디서 얻어야 하는지 정리한 문서입니다.
다음 단계
메일 발송 adapter와 연결하고, 링크 스캐너가 링크를 먼저 열어 소비해 버리는 경우까지 고려한 소비 화면 정책을 검증합니다.