JWT
- JWT는 header, payload, signature로 구성되어 있으며 header는 signature를 해싱하기 위한 알고리즘 정보가 담겨있고 payload는 실제로 사용될 데이터들이 담겨 있습니다. signature는 토큰의 유효성 검증을 위한 문자열로 이 문자열을 통해 이 토큰이 유효한 토큰인지 검증 가능.
- JSON 객체를 사용해서 토큰 자체에 정보를 저장하는 Web Toekn 입니다.
- Header, Payload, Signature 3개의 부분으로 구성 되어있고, 쿠키나 세션을 이용한 인증보다 안전하고 효율적입니다
- 일반적으로 Authroiztion: <type><credentials> 형태로 Request Header에 담겨져 오기 때문에 Header 값을 확인해서 가져올 수 있습니다.
Token 구성요소
- Header
- alg : Signature 를 해싱하기 위한 알고리즘 정보를 갖고 있음
- type : 토큰의 타입을 나타낸다 . 보통 JWT 를 사용
- Payload
- 서버와 클라이언트가 주고받는, 시스템에서 실제로 사용될 정보에 대한 내용을 담고 있음
- JWT 가 기본적으로 가지고 있는 키워드가 존재
- 원한다면 추가할 수도 있음
- iss: 토큰 발급자
- sub: 토큰 제목
- aud: 토큰 대상
- exp: 토큰의 만료시간
- nbf: Not Before
- iat: 토큰이 발급된 시간
- jti: JWT의 고유 식별자
- Signature
- 서버에서 토큰이 유효한지 검증하기 위한 문자열
- Header + Payload + Secret Key 로 값을 생성하므로 데이터 변조 여부를 판단 가능
- Secret Key 는 노출되지 않도록 서버에서 잘 관리 필요
토큰 인증 타입
Authorization: <type> <credentials> 형태에서 <type> 부분에 들어갈 값입니다.
엄격한 규칙이 있는건 아니고 일반적으로 많이 사용되는 형태라고 생각하면 됩니다.
- Basic
- 사용자 아이디와 암호를 Base64 로 인코딩한 값을 토큰으로 사용
- Bearer
- JWT 또는 OAuth 에 대한 토큰을 사용
- Digest
- 서버에서 난수 데이터 문자열을 클라이언트에 보냄
- 클라이언트는 사용자 정보와 nonce 를 포함하는 해시값을 사용하여 응답
- HOBA
- 전자 서명 기반 인증
- Mutual
- 암호를 이용한 클라이언트-서버 상호 인증
- AWS4-HMAC-SHA256
- AWS 전자 서명 기반 인증
JWT 장단점
- 장점
- 중앙 인증 서버, 저장소에 대한 의존성이 없어서 수평 확장에 유리
- Base64 URL Safe Encoding 이라 URL, Cookie, Header 어떤 형태로도 사용 가능
- Stateless 한 서버 구현 가능
- 웹, 모바일에서 사용 가능
- 인증 정보를 다른 곳에서 사용 가능 (OAuth)
- 단점
- Payload의 정보가 많으면 네트워크의 사용량 증가
- 다른 사람이 토큰을 decode하여 데이터 확인 가능
- 토큰을 탈취당한 경우 대처하기 어렵다
- 기본적으로는 서버에서 관리하는게 아니다보니 탈취당한 경우 강제 로그아웃 처리가 불가능
- 토큰 유효시간이 만료되기 전까지 탈취자는 자유롭게 인증 가능
- 그래서 유효시간을 짧게 가져가고 refresh token 을 발급하는 방식으로 많이 사용
참고자료 : https://github.com/ParkJiwoon/PrivateStudy/blob/master/web/jwt.md
'개발 지식 > 정리' 카테고리의 다른 글
AWS EC2 배포 이슈사항(mysql, jar파일 빌드) (0) | 2023.04.01 |
---|---|
Swagger 기본 사용법 (0) | 2023.03.20 |
Redis (레디스) (0) | 2023.03.18 |
REST API란? (REST, RESTFUL) (0) | 2023.03.12 |
최대공약수(GCD) 와 최소공배수 (LCM) (0) | 2023.01.02 |