목차
- What is JWT?
- JWT 내부 구조
- JWT 인증 사용 방법
- JWT 장점
- JWT 단점
인증 방법은 크게 세션, 쿠키, token 방식 세가지가 있다.
그 중 오늘 알아볼 부분은 token 방식 중 JWT에 대해서 알아보자.
배움에는 늘 끝이 없구나..
What is JWT?
- 일명 JWT 토큰이라고 부르는 토큰 방식의 풀네임은 Json Web Token 이다.
- 개방형 표준 규격이다. RFC 7519
- 전자서명에는 비대칭 암호화 알고리즘을 사용하므로 암호화를 위한 키와 복호화를 위한 키가 다르다.
암호화(전자서명)에는 개인키를, 복호화(검증)에는 공개키를 사용한다. - 아래 사이트에서 JWT 복호화, 암호화 정보를 확인할 수 있다.
https://jwt.io/
JWT의 내부 구조
헤더 | { "alg" : "HS256" , "typ" : "JWT" } |
토큰 생성을 위해 어떤 알고리즘을 사용할 지 명시한다. HS256는 이 토큰이 HMAC-SHA256를 사용하여 서명됨을 의미한다. 일반적으로 쓰이는 암호화 알고리즘들은 SHA-2(HS256) 방식의 HMAC와 SHA-256(RS256) 방식의 RSA 서명이다. → 추가로 공부하자. |
페이로드 | { "loggedInAs" : "admin" , "iat" : 1422779638 } |
토큰에 들어있는 custom한 정보들이 담겨있다. 클레임이라고 명명하기도 하는데, key-value로 이루어진 정보로 구성되어 있다. |
서명 | HMAC-SHA256( secret, base64urlEncoding(header) + '.' + base64urlEncoding(payload) ) | 토큰을 안전하게 확인하기 위한 서명이다. Base64url 인코딩을 이용하여 헤더와 페이로드를 인코딩하고 이 둘을 점(.)으로 구분자로 연결시킨다. 그 뒤에 헤더에 규정된 암호화 알고리즘에 따라 전체가 암호화된다. |
간단한 예시를 보면 아래와 같다.
JWT 인증 사용방법
JWT 장점
- Header와 Payload를 가지고 signature를 생성하므로 데이터 위변조를 막을 수 있다.
- 인증 정보에 대한 별도의 저장소가 필요없다.
- 필요한 모든 정보를 자체적으로 지니고 있다.
- 클라이언트 인증정보를 저장하는 세션과는 다르게 서버는 클라이언트의 상태를 저장하지 않는다. (stateless)
- 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다. (쿠키는 불가)
- Oauth의 경우 Facebook, Google등 소셜 계정을 이용해서 다른 웹서비스에서도 로그인을 할 수 있다.
JWT 단점
- 쿠키/세션과 다르게 JWT는 토큰의 길이가 길어 인증 요청이 많아질수록 네트워크 부하가 심해진다.
- Payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보는 담을 수 없다.
- 토큰을 탈취당한 경우 대처가 어렵다.
참고자료
더보기
- platuml : 직접그림
- https://ko.wikipedia.org/wiki/JSON_%EC%9B%B9_%ED%86%A0%ED%81%B0
- https://pronist.dev/143
- https://www.ibm.com/docs/ko/zos-connect/zosconnect/3.0?topic=options-calling-api-secured-json-web-token-jwt
'Infra > ETC' 카테고리의 다른 글
오류해결 zsh: command not found: nvm (0) | 2022.11.29 |
---|---|
git계정 여러개 폴더별로 사용하기(github, gitlab etc) (0) | 2022.11.28 |
인텔리제이 유용한 단축키(Linux-Ubuntu,Window) (0) | 2022.06.08 |
[Linux-Ubuntu] gradle version upgrade 버전 낮아서 오류시 (0) | 2022.05.23 |
[Linux] ppk 파일을 openssh 파일(.pem)로 변경해서 사용하기 (0) | 2022.04.21 |