[Spring Security] 토큰

kwang-sub·2024년 12월 27일

토큰이란?

토큰은 애플리케이션이 사용자를 인증했음을 증명하며 해당 사용자의 권한을 부여받는 방법의 일종으로 출입카드와 같은 개념이다.

장점

토큰을 이용하면 요청할 떄마다 자격 증명을 공유할 필요가 없다.
토큰의 수명을 짧게 지정할 수 있다.
토큰은 요청에 필요한 세부 정보를 저장할 수 있다.
토큰을 이용하면 인증 책임을 시스템의 다른 구성 요소로 분리할 수 있다.

JSON 웹 토큰(JWT)

많은 애플리케이션에서 사용되는 토큰의 구체적인 구현체이다.
헤더.본문.디지털서명와 같은 형식을 가진다. 디지털 서명 부분은 생략이 가능은 하지만 변조되지 않음을 보장하는 중요한 부분이다.

명칭형식설명
헤더(Header)JSON 형식 (Base64URL 인코딩)- JWT의 타입(typ: JWT)과 서명 알고리즘(alg) 정보를 포함
- 가볍고 간결하게 설계됨
본문(Payload)JSON 형식 (Base64URL 인코딩)- 사용자 데이터(Claim) 포함
- 필수 필드는 없으며, 공개/등록/비공개 Claim으로 구성
- 보안 민감 정보 포함 금지
디지털 서명(Signature)해시 값 (HMAC, RSA, etc.)- Header와 Payload를 비밀키 또는 비공개 키로 서명
- 변조 방지 기능 제공

본문 클레임은 토큰의 주요 정보를 말하며 아래와 같은 유형이 있습니다.

유형설명
등록된 클레임 (Registered Claims)사전에 정의된 표준 클레임
예: iss (발급자), exp (만료시간), sub (주제), aud (대상)
공개 클레임 (Public Claims)누구나 정의 가능 (충돌 방지를 위해 네임스페이스 사용 권장)
비공개 클레임 (Private Claims)클라이언트와 서버 간에만 사용되는 클레임

JWT 적용

JWT를 사용하기 위해서는 해당 의존성이 필요하며 링크를 통해 사용 방법을 숙지하자

	implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
    runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
    runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'

    implementation group: 'jakarta.xml.bind', name: 'jakarta.xml.bind-api', version: '4.0.2'
    implementation group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '4.0.5'
profile
백엔드 개발일지

0개의 댓글