일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- API 명세서
- 무료IT교육
- 네이버클라우드플랫폼
- Elastic Search
- AI코칭스터디
- 리액트
- 코드프레소
- 코딩이러닝
- 프로그래머스
- 코딩스터디
- 코딩강의
- 마크다운
- 대외활동
- reduce()
- markdown
- 무료코딩교육
- 네이버커넥트재단
- NCP
- IT교육
- 매직메서드
- 코딩테스트
- 자바스크립트
- codepresso
- 엘라스틱서치
- 슥삭
- MySQL
- 타입스크립트
- GitLab
- git
- 깃허브
- Today
- Total
개발하는 무민
[JWT/보안] JWT token을 사용하는 이유 본문
로그인 서비스 관련 개발을 하면서 JWT 토큰을 조사한 내용을 정리한다.
- JWT란?
JWT( Json Web Token)은 웹 표준(RFC 7519)으로 지정되어 있는 JSON 객체를 사용하여 클라이언트와 서버 간에 안전하게 정보를 전달하기 위한 방식 중 하나
- JWT 토큰을 사용하는 이유
아이디,패스워드 로그인 방식은 예전 단말기(어차피 아무나 접근할 수 없는)방식에서의 인증 방식이라 예전에는 문제가 되지 않았었다.
현재는 인터넷이라는 익명성이 있는 웹에서 사용해야 하기 때문에 인증된 통로로 들어와야한다. (아무나 받아주면 안되기 때문에)
그래서 인증된 토큰을 발행해서 해당 유저가 인증 되었음을 확인하기 위해 JWT를 사용한다.
즉, JWT : 유저를 식별하기 위한 토큰 기반 인증 방식 (Json 형태, Web Token)
- 전세계 표준은 OpenID를 따른다 (https://openid.net/)
토큰 → 서버가 아닌 클라이언트에 저장됨.
메모리나, 스토리지로 관리하지 않아도 된다.
토큰 자체에 사용자 권한 정보, 서비스 이용을 위한 정보 포함되어 있음
(그래서 데이터가 많아지면 토큰이 커질 수 있음)
JWT를 사용시, 무상태 환경에서 사용자 데이터 주고받기가 가능하다.
세션을 사용할 때에는 쿠키 등으로 식별하고 서버에 세션을 저장했지만,
JWT는 클라이언트에 토큰을 저장하고 요청이 들어오면 HTTP 헤더에 토큰을 첨부하는 것으로 데이터 요청/응답을 받을 수 있다.
일반적으로 JWT 사용시, 이렇게 진행됨
- 클라이언트 사용자가 아이디, 패스워드를 통해 웹서비스 인증.
- 서버에서 서명된(Signed) JWT 를 생성하여 클라이언트에 응답으로 돌려주기.
- 클라이언트가 서버에 데이터를 추가적으로 요구할 때 JWT 를 HTTP Header 에 첨부.
- 서버에서 클라이언트로부터 온 JWT 를 검증.
JWT 는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이 포함됨
JWT 내부에는 위변조 방지를 위한 개인키를 통한 전자 서명도 있음.
사용자가 JWT를 서버로 전송하면 서버는 서명을 검증하는 과정을 거쳐 검증이 완료되면 요청한 응답을 돌려준다.
- JWT의 구조
- Header : JWT에서 사용할타입과 해시 알고리즘의 종류가 담겨있음
- Payload : 서버에서 첨부한 사용자 권한 정보와 데이터가 담겨있음
- Signature : 헤더, 페이로드를 Base64 URL-safe Encode한 이후 헤더에 명시된 해시 함수를 적용하고 개인키(private key)로 서명한 전자 서명이 담겨있음
암호화(전자서명)에는 개인키를, 복호화(검증)에는 공개키를 사용한다.
'Development' 카테고리의 다른 글
[API] API 문서 작성 요령 익히기 (0) | 2022.12.16 |
---|---|
Markdown 기본 문법 정리_깃허브 활용 (0) | 2022.01.05 |