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주차 (0) | 2023.01.01 |