[내일배움캠프_Spring] 자바 Spring 입문_JWT_230104

2023. 1. 5. 21:33·스파르타 부트캠프(spring)

JWT(Json Web Token)

: 토큰 기반 인증 시스템의 대표적인 구현체. 일반적으로 클라이언트와 서버 통신 시 권한 인가를 위해 사용하는 토큰

 

장점

  • 중앙의 인증 서버, 데이터 스토어에 대한 의존성 없음, 시스템 수평 확장 유리
  • Base64 URL Safe Encoding > URL, Cookie, Header 모두 사용 가능

단점

  • Payload의 정보가 많아지면 네트워크 사용량 증가, 데이터 설계 고려 필요
  • 토큰이 클라이언트에 저장, 서버에서 클라이언트의 토큰을 조작할 수 없음

 

헤더(header)

: 토큰의 타입과 해싱 알고리즘을 지정하는 정보를 포함한다.

{
"typ":"JWT",
"alg":"HS256"
}
  • typ : 토큰의 타입 지정. JWT라는 문자열이 들어가게 됨
  • alg : 해상 알고리즘을 지정
  • 위 예제는 JWT토큰으로 이루어져 있고 해당 토큰은 HS256으로 해상 알고리즘으로 사용됨

 

내용(payload)

: 토큰에 담을 정보가 들어간다.

정보의 한 덩어리 = 클레임. 클레임은 key-value의 한 쌍으로 이루어져 있다. 클레임 은 3 종류

{
"iss": "ajufresh@gmail.com", // 등록된(registered) 클레임
"iat": 1622370878, // 등록된(registered) 클레임
"exp": 1622372678, // 등록된(registered) 클레임
"https://shinsunyoung.com/jwt_claims/is_admin": true, // 공개(public) 클레임
"email": "ajufresh@gmail.com", // 비공개(private) 클레임
"hello": "안녕하세요!" // 비공개(private) 클레임
}
  • 등록된(registered) 클레임
    • 토큰에 대한 정보를 담기 위한 클레임들이며, 이미 이름이 등록되어있는 클레임
    • iss : 토큰 발급자(issuer)
    • sub : 토큰 제목(subject)
    • aud : 토큰 대상자(audience)
    • exp : 토큰의 만료시간(expiraton). 시간은 NumericDate 형식으로 되어있어야 하며,(예: 1480849147370) 항상 현재 시간보다 이후로 설정되어있어야한다.
    • nbf : Not Before 를 의미하며, 토큰의 활성 날짜와 비슷한 개념. NumericDate 형식으로 날짜를 지정하며, 이 날짜가 지나기 전까지는 토큰이 처리되지 않는다.
    • iat : 토큰이 발급된 시간 (issued at)
    • jti : JWT의 고유 식별자로서, 주로 일회용 토큰에 사용한다.
  • 공개(public) 클레임
    • 말 그대로 공개된 클레임, 충돌을 방지할 수 있는 이름을 가져야하며, 보통 클레임 이름을 URI로 짓는다.
  • 비공개(private) 클레임
    • 클라이언트 - 서버간에 통신을 위해 사용되는 클레임

 

서명(signature)

: 해당 토큰이 조작되었거나 변경되지 않았음을 확인하는 용도.

 헤더의 인코딩 값과 정보의 인코딩 값을 합친 후 주어진 비밀키를 통해 해쉬값 생성

 

 

'스파르타 부트캠프(spring)' 카테고리의 다른 글

[내일배움캠프_spring] 주간회고 WIL - 9주차  (0) 2023.01.08
[내일배움캠프_Spring] 자바 Spring 입문_CS강의-메모리_230106  (0) 2023.01.08
[내일배움캠프_Spring] 자바 Spring 입문_SQL쿼리_230104  (0) 2023.01.04
[내일배움캠프_Spring] 자바 Spring 입문_메서드_230103  (0) 2023.01.03
[내일배움캠프_spring] 주간회고 WIL - 8주차  (5) 2023.01.01
'스파르타 부트캠프(spring)' 카테고리의 다른 글
  • [내일배움캠프_spring] 주간회고 WIL - 9주차
  • [내일배움캠프_Spring] 자바 Spring 입문_CS강의-메모리_230106
  • [내일배움캠프_Spring] 자바 Spring 입문_SQL쿼리_230104
  • [내일배움캠프_Spring] 자바 Spring 입문_메서드_230103
yeah구리
yeah구리
백엔드를 공부하는 초심자입니다.
  • yeah구리
    개발일지_헤맨만큼 내땅이다
    yeah구리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 스파르타 부트캠프(spring) (75)
      • 스파르타 기술면접 (10)
      • 코딩연습 (0)
      • 항해 (10)
      • 개발일지 (4)
        • 개인 회고 (1)
        • 개발로그 (실무) (2)
      • 공부노트 (0)
      • 코딩테스트 (0)
        • 프로그래머스 (0)
        • 백준 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비전공개발자 #개발로그 #커리어
    X(Twitter) API #캐싱 #트러블슈팅 #개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
yeah구리
[내일배움캠프_Spring] 자바 Spring 입문_JWT_230104
상단으로

티스토리툴바