개발자 도구 · JWT 디코더
JWT 대 세션 쿠키: 상태 비저장 토큰이 웹 인증을 변경하는 방법
· 배경
jwt 인증 웹 보안
JWT가 무국적을 약속하기 몇 년 전에는 서버 측 세션이 웹 인증을 지배했습니다. 이 게시물에서는 이러한 변화를 추적하고, 도입된 비용을 평가하며, 대부분의 팀이 최종적으로 얻게 되는 하이브리드 설계에 대해 설명합니다.
세션 쿠키를 사용하면 어떨까요? — JWT를 채택하기 전에 실제 답변이 필요한 질문입니다.
JWT를 채택하기 전에 서버 측 세션이 해결하지 못하는 문제가 무엇인지 물어보세요. 불투명한 쿠키 값을 대규모 자체 포함 자격 증명으로 바꾸면 취소, 공개 및 확인 책임이 변경됩니다. 무국적은 자동 보안이나 확장성 업그레이드가 아닌 많은 속성 중 하나입니다.
ToolAcre는 JWT이 모든 요청에 대해 수행하는 작업을 보여줄 수 있지만 애플리케이션 처리량을 비교하거나 아키텍처를 규정할 수는 없습니다. 디코딩된 크기와 주장을 증거로 사용한 다음 배포, 위협 모델 및 기존 세션 인프라와 비교하여 평가합니다.
서버 측 세션 — 서버 상태를 가리키는 쿠키의 불투명 ID 및 해당 모델의 기능
기존 서버 측 세션에서 브라우저는 불투명 식별자를 보유하고 서버는 이를 현재 상태에 매핑합니다. 해당 조회는 세션을 종료하고, 권한을 변경하고, 클라이언트로부터 데이터를 보관할 수 있는 자연스러운 장소를 제공합니다. 또한 스토리지 및 가용성 책임도 발생합니다.
쿠키와 세션은 동의어가 아닙니다. 쿠키는 전송 컨테이너이고 상태는 서버에 있습니다. 보안은 속성, 원본 경계 및 애플리케이션 동작에 따라 달라집니다. 무작위로 보이는 세션 ID는 무기명 자격 증명으로 유지되며 우연히 노출되어서는 안 됩니다.
자체 포함된 확인을 통해 공유 세션 조회를 줄일 수 있습니다. 서비스 간에 자동으로 신뢰를 생성하지 않습니다.
자체 포함 토큰을 사용하면 리소스 서버가 모든 요청에 대해 공유 세션을 조회하지 않고도 보호된 바이트와 클레임을 확인할 수 있습니다. 이는 분산 시스템에 적합할 수 있지만 형식에 따라 서비스 간 신뢰가 생성되지 않습니다. 서비스에는 여전히 신뢰할 수 있는 발급자 키, 허용되는 알고리즘, 대상 정책 및 호환 가능한 토큰 프로필이 필요합니다.
ToolAcre는 이러한 신뢰 관계를 제공하지 않습니다. 헤더와 페이로드를 디코딩하고 서명을 확인되지 않은 것으로 보고합니다. 자체 구성을 건너뛰는 서비스는 중앙 세션 종속성을 안전하지 않은 수락 경로로 대체할 뿐입니다.
비용 — 취소, 모든 요청의 토큰 크기, 쿠키와 웹 저장소 간의 저장소 딜레마
자체 포함 자격 증명은 청구 및 암호화 자료가 반복적으로 이동하므로 더 커질 수 있습니다. 외부 상태나 짧은 승인 기간이 도입되지 않는 한 즉시 취소는 더 어려워집니다. 쿠키, 브라우저 메모리 또는 웹 저장소에 저장하면 노출을 제거하는 것이 아니라 노출을 변경합니다.
읽기 가능한 페이로드는 로그 및 중개자 전반에 걸쳐 개인 데이터 또는 인증 데이터를 복제할 수도 있습니다. 클레임을 최소화하고 인코딩을 기밀로 취급하지 마세요. 세션 식별자는 구조를 덜 공개하지만 세션이 활성 상태인 동안에도 도난이 여전히 권한을 부여할 수 있습니다.
CSRF 및 XSS는 단순히 JWT 대 세션 레이블이 아니라 자격 증명 전송 및 저장소 선택에 따라 달라집니다.
CSRF 위험은 브라우저가 자동으로 첨부하는 자격 증명과 밀접한 관련이 있는 반면 XSS는 페이지 스크립트에 사용 가능한 데이터 및 작업을 노출할 수 있습니다. 쿠키의 JWT는 쿠키 전송 동작의 적용을 계속 받으며, 웹 저장소의 세션 식별자는 전달자 비밀 역할을 계속합니다.
따라서 형식 레이블만으로는 방어를 선택할 수 없습니다. 자격 증명이 저장되는 위치, 자격 증명을 읽을 수 있는 사람, 브라우저가 자격 증명을 보내는 시기 및 상태 변경 요청을 보호하는 방법을 모델로 삼습니다. 하나의 아키텍처가 "CSRF를 해결한다"거나 "XSS를 해결한다"는 단순한 주장을 피하십시오.
작업된 예 — 세션 및 JWT에 대해 단계별로 설명된 동일한 로그인 흐름
세션 흐름에서 로그인은 서버 상태를 설정하고 불투명 식별자를 반환합니다. 이후 요청에서는 이를 제시하고 서버는 현재 정책을 로드합니다. JWT 흐름에서 로그인은 보호된 토큰을 발급합니다. 이후 요청은 더 큰 값을 보내고 리소스 서버는 이를 확인하고 관련 클레임을 확인합니다.
로그아웃은 두 흐름 모두에서 브라우저 복사본을 삭제할 수 있지만 즉각적인 서버 무효화는 당연히 세션 상태와 연결되어 있으며 자체 포함 토큰에 대해 명시적으로 설계되어야 합니다. ToolAcre는 로그아웃이나 해지가 실제로 적용되었는지 여부가 아니라 JWT의 주장된 만료 및 대상을 표시할 수 있습니다.
하이브리드 설계에는 여전히 명시적인 새로 고침, 해지 및 검증자 정책이 필요합니다.
하이브리드 설계는 상태 저장 새로 고침 프로세스가 있는 제한된 액세스 토큰을 사용하거나 제어된 서비스 간에만 JWT가 있는 불투명 외부 자격 증명을 사용할 수 있습니다. 이러한 접근 방식은 상태를 폐지하는 것이 아니라 상태를 이동시킵니다. 여전히 안전한 새로 고침 스토리지, 키 순환, 해지 동작 및 정책 테스트가 필요합니다.
이 저장소는 범용 토큰 수명이나 하이브리드 레시피를 정의하지 않으므로 이 문서에서는 아무것도 제공하지 않습니다. 측정된 위험 및 운영 제약 조건에서 기간과 메커니즘을 선택한 다음 아키텍처 레이블에 의존하는 대신 도난당한 토큰 및 로그아웃 시나리오를 테스트하세요.
요점: 무국적은 업그레이드가 아닌 거래입니다. JWT를 선택하면 ToolAcre JWT 디코더는 각 토큰이 모든 요청에 대해 전달하는 내용을 보여줍니다.
무국적은 업그레이드가 아닌 거래입니다. 서버 세션은 조회 비용으로 현재 상태와 취소를 중앙 집중화합니다. 자체 포함 토큰은 더 큰 자격 증명, 읽을 수 있는 클레임 및 보다 명시적인 무효화 설계를 희생하여 검증을 배포합니다.
JWT이 적합하면 ToolAcre를 사용하여 안전한 예를 검사하고 각 요청이 전달하는 내용을 이해합니다. 디스플레이를 진위 또는 승인의 증거로 취급하지 마십시오. 아키텍처는 신뢰할 수 있는 검증자, 저장소 선택 및 해지 메커니즘이 위협 모델과 일치하는 경우에만 성공합니다.