우리는 네이티브 앱에서 한 번만 로그인하면 되고, 로그아웃하기 전에 사용자를 기억하도록 하는 방식을 선호합니다. 안타깝게도 웹은 항상 그런 식으로 작동하지는 않습니다.
이제 기기, 특히 휴대기기는 더 개인화되고 HTTPS를 통해 모든 트래픽을 전송하는 사이트가 더 많아져 토큰 도난 위험이 감소하므로 웹사이트는 단기 쿠키 정책을 재고하고 보다 사용자 친화적이고 수명이 긴 세션을 채택해야 합니다.
그러나 세션을 더 오래 유지하려는 경우에도 일부 웹사이트에서는 각 요청에 대한 사용자 인증을 확인하지 않습니다. 즉, 세션 쿠키가 발행되면 취소할 수 없습니다. 이로 인해 일반적으로 짧은 세션이 발생합니다. 사용자가 자주 로그인해야 하므로 인증을 다시 확인할 수 있으므로 비밀번호 변경과 같은 작업이 알려진 시간 내에 기존 세션을 무효화할 수 있습니다.
이러한 접근 방식을 사용하는 경우 스테이트리스(Stateless) 인증 쿠키를 자동으로 재검증하는 데 도움이 되는 기술 솔루션이 있습니다. 기존 단기 인증 쿠키를 새로고침하는 데 사용할 수 있는 장기 보조 토큰이 있어서 작동합니다. 새 서비스 워커 패턴을 활용하면 장기 토큰으로 정기적으로 '체크인'하고, 사용자의 인증을 확인 (예: 사용자가 최근에 비밀번호를 변경하지 않았거나 세션을 취소하지 않았는지 확인)하고 새로운 단기 인증 쿠키를 다시 발급할 수 있습니다.
안전한 장기 웹 세션으로 이전하기 위한 실용적인 제안
지금부터 이 게시물에서는 Google에서 제안하는 2-Cookie-Handoff (2CH)라는 새로운 기법을 설명합니다. Google은 이 문서를 사용하여 이 접근 방식이 긍정적인지, 그리고 그렇게 한다면 2CH 사용 권장사항을 문서화하는 데 업계와 협력할 수 있는지에 관한 커뮤니티의 의견을 듣고자 합니다.
서비스 워커는 Chrome, Firefox, Opera와 같은 여러 브라우저에서 지원하는 새로운 기술이며 Edge에 곧 제공될 예정입니다. 이 태그를 사용하면 기존 페이지를 수정하지 않고도 클라이언트의 공통 코드 포인트를 통해 사이트의 모든 네트워크 요청을 가로챌 수 있습니다. 이를 통해 로그인된 사용자를 위해 페이지에서 실행하는 모든 네트워크 요청을 가로채고 모바일 앱과 마찬가지로 토큰 스와핑을 실행할 수 있는 '2CH worker'를 설정할 수 있습니다.
대부분의 경우 일반적으로 OAuth 프로토콜을 사용하여 모바일 앱에서 새 단기 토큰을 얻는 데 사용하는 엔드포인트가 서버에 이미 있습니다. 웹에서 위 패턴을 사용 설정하려면 엔드포인트를 업데이트하여 언제 서비스 워커가 이 엔드포인트를 호출하는지 파악한 다음 사이트의 다른 페이지에서 이미 예상하는 방식으로 형식이 지정된 새로운 단기 세션 쿠키를 반환하기만 하면 됩니다.
서버에 이러한 엔드포인트가 아직 없는 경우 브라우저 세션 관리만을 위해 만들 수 있습니다.
서비스 워커가 있는 2개의 토큰 패턴은 OAuth 2.0 패턴을 상당히 유사하게 따릅니다. 이미 OAuth 토큰 엔드포인트를 실행 중인 경우 웹 인증에 이를 서비스 워커와 함께 재사용할 수 있습니다.
사용자가 서비스 워커를 지원하지 않는 브라우저를 방문하면 어떻게 되는지 궁금할 수도 있습니다. 위의 접근 방식을 구현하면 아무런 차이가 없고 계속해서 짧은 세션이 발생합니다.
샘플 클라이언트 및 백엔드를 게시했습니다. 직접 사용해 보고 세션 관리에 관한 설문조사에 응답해 보시기 바랍니다.