짧은 세션 종료 - 서비스 워커를 사용하여 웹에서 쿠키 관리를 개선하기 위한 제안

윌리엄 데니스
오웬 캠벨 무어

네이티브 앱에서 한 번만 로그인하도록 요청한 다음 로그아웃하겠다고 말할 때까지 사용자 정보를 기억하는 방식이 모두 유용할 것입니다. 불행히도 웹이 항상 그런 식으로 작동하는 것은 아닙니다.

기기, 특히 휴대기기가 더욱 개인화되고 HTTPS를 통해 모든 트래픽을 전송하는 사이트가 많아져 토큰 도용의 위험이 줄어듦에 따라 웹사이트에서 단기 쿠키 정책을 재고하고 보다 사용자 친화적인 장기 세션을 채택해야 합니다.

그러나 세션을 더 오래 유지하려고 하는 경우에도 일부 웹사이트에서는 각 요청에서 사용자 인증을 확인하지 않습니다. 즉, 세션 쿠키가 발급된 후에는 취소할 방법이 없습니다. 이 경우 일반적으로 짧은 세션으로 이어지며, 사용자가 인증을 다시 검증할 수 있도록 자주 로그인해야 하므로 비밀번호 변경과 같은 작업으로 알려진 시간 내에 기존 세션이 무효화됩니다.

이 방법을 사용하는 경우 스테이트리스(Stateless) 인증 쿠키의 유효성을 자동으로 재검증하는 데 도움이 될 수 있는 기술 솔루션이 있습니다. 기존 단기 인증 쿠키를 갱신하는 데 사용할 수 있는 장기 수명이 보조인 토큰이 있어야 작동합니다. 새 서비스 워커 패턴을 활용하면 사용 기간이 긴 토큰으로 정기적으로 '체크인'하고, 사용자의 인증을 확인하고 (예: 사용자가 최근에 비밀번호를 변경하지 않았거나 세션을 취소한 적이 없는지 확인) 새로운 단기 인증 쿠키를 다시 발급할 수 있습니다.

안전한 웹 세션으로 이전하기 위한 실용적인 제안

지금부터 이 게시물에서는 2-Cookie-Handoff (2CH)라고 부르는 새로운 기법을 설명합니다. 이 문서를 통해 이 접근 방식이 긍정적인지 여부와 2CH 사용과 관련된 권장사항을 문서화하는 업계와 함께 논의하는 데 관한 커뮤니티 의견을 듣고자 합니다.

서비스 워커는 Chrome, Firefox, Opera와 같은 여러 브라우저에서 지원되는 새로운 기술이며 곧 Edge에 도입될 예정입니다. 이를 사용하면 기존 페이지를 수정하지 않고도 클라이언트의 공통 코드 포인트를 통해 사이트의 모든 네트워크 요청을 가로챌 수 있습니다. 이렇게 하면 페이지에서 발생하는 모든 네트워크 요청을 가로채고 모바일 앱과 마찬가지로 토큰 스와핑을 실행할 수 있는 로그인한 사용자에 대해 '2CH worker'를 설정할 수 있습니다.

모바일 앱에서 일반적으로 OAuth 프로토콜을 사용하여 새로운 단기 토큰을 가져오는 데 사용하는 엔드포인트가 서버에 이미 있는 경우가 많습니다. 웹에서 위의 패턴을 사용 설정하려면 엔드포인트가 서비스 워커에 의해 호출되는 시점을 파악하도록 업데이트한 다음, 사이트의 다른 페이지에서 이미 예상하는 방식으로 형식이 지정된 새로운 단기 세션 쿠키를 반환하기만 하면 됩니다.

서버에 아직 이러한 엔드포인트가 없는 경우 브라우저 세션 관리만을 위한 엔드포인트를 만들 수 있습니다.

2개의 쿠키 핸드오프 시퀀스

서비스 워커가 있는 2개 토큰 패턴은 OAuth 2.0 패턴을 상당히 따릅니다. OAuth 토큰 엔드포인트를 이미 실행한 경우 웹 인증을 위해 서비스 워커에서 이를 재사용할 수 있습니다.

또한 사용자가 서비스 워커를 지원하지 않는 브라우저를 방문하면 어떻게 되는지 궁금할 수 있습니다. 위의 접근 방식을 구현해도 차이가 없는 것은 아니며 계속해서 짧은 세션을 경험하게 됩니다.

샘플 클라이언트 및 백엔드를 게시했습니다. 직접 사용해 보시고 세션 관리에 관한 설문조사에 참여해 주시기 바랍니다.