09장 JWT로 로그인/로그아웃 구현하기

올찬·2023년 10월 29일
0

💡 이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 09장 써머리입니다.

핵심 키워드

토큰 기반 인증

  • 서버가 발급한 토큰으로 사용자를 인증하는 방식, 서버는 토큰만 보고 유효한 사용자인지 검증함
  • 토큰(Token): 서버에서 클라이언트를 구분하기 위한 유일한 값
  • 특징
    • 무상태성: 클라이언트가 사용자 인증을 위한 토큰을 저장하기 때문에 서버는 사용자 인증 정보를 저장하거나 유지하지 않아도 됨
    • 확장성: 무상태성으로 인해, 하나의 토큰으로 여러 서버에서 인증 가능함
    • 무결성: 토큰을 발급한 이후에 토큰 정보를 변경할 수 없음. 변경 시, 서버에서 유효하지 않은 토큰으로 판단함. 정보 변경 시 서버로부터 새로 토큰을 발급받아야 함.

JWT(JSON Web Token)

  • 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준(from wiki) (└> from https://jwt.io/)
  • 헤더(Header), 내용(payload), 서명(signature)로 구성됨
    • 헤더: 토큰의 종류와 해싱 알고리즘 저장
    • 내용: 토큰과 관련된 정보 저장, 내용의 한 덩어리를 클레임(claim)이라고 함(Map 형태) — 등록된 클레임, 공개 클레임, 비공개 클레임으로 분류
      • 등록된 클레임: 토큰에 대한 정보 저장 — 토큰 발급자/제목/만료시간/발급시간 등

      • 공개 클레임: 공개 가능한 클레임, 유일한 이름을 가져야 함 — 보통 URI로 지음

      • 비공개 클레임: 공개 불가한 클레임, 클라이언트—서버 간 통신에 사용

        {
        	"iss" : "allchan@gmail.com", // 등록된 클레임
        	"iat" : 1622370878, // 등록된 클레임
        	"exp" : 1622372678, // 등록된 클레임
        	"https://allchan.com/jwt_claims/is_admin" : true, // 공개 클레임
        	"email" : "allchan@gmail.com", // 비공개 클레임
        	"hello": "안녕하세요" // 비공개 클레임
        }
      • 서명: 토큰의 무결성을 검증하기 위한 용도로 사용, 헤더의 인코딩값과 내용의 인코딩값을 합친 후 주어진 비밀키를 이용해 해시값 생성

필터

  • 특정 URL 패턴에 맞는 모든 요청을 처리하는 기능 제공

  • 9장에서는 사용자 요청의 헤더값에 토큰이 있는지 확인하고 유효하면 security context holder에 인증 정보를 저장하기 위해 사용

    • Security Context: 인증 객체가 저장되는 보관소, 이 클래스는 스레드 로컬에 저장됨
    • Thread Local: 쓰레드 단위로 로컬 변수를 할당하는 기능(from 최범균 님)
    • Security Context Holder: Security Context 객체를 저장하는 객체
profile
묘공단 스터디 블로그

0개의 댓글