JWT(Json Web Token)
1. JWT
서버와 클라이언트 간의 인증 매개체
웹 토큰: 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준
웹표준(RFC 7519)으로서 두 개체에서 JSON 객체를 사용하여 통신.
-JSON 포맷을 기반으로 사용자에 대한 속성을 저장하는 Web Token
-토큰자체를정보로사용하는Self-Contained 방식으로정보를안정하게전달
서버에서 세션관리하지 않아 JWT로 인증을 수행 하므로 더는 인증을 위한 세션을 관리하면서 서버의 리소스를 낭비하지 않아도 됩니다.
구성 : Header.Playoad.Signature
Base64 encoding되어 표현
Base64: 암호화된 문자열이 아닌 동일한 문자열에 대해 항상 같은 인코딩 문자열을 반환
. 구분자로 구분
서버에 부담주지 않고 쿠키와 세션의 장점을 합침
예.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
(단방향)암호화 | 복호화 |
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 | { "alg": "HS256", "typ": "JWT" } |
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ | { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } |
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c | HMACSHA256( base 64UrlEncode(header), +"."+ base 64UrlEncode(payload), your-256-bit-secret ) |
1.1 Header
(1) typ
토큰 타입
(2) alg
서명 및 토큰 검증에 사용하는 알고리즘 방식 지정
{ "typ": "JWT" , "alg":" HS256" }
1.2 Payload
토큰에서 사용할 정보 조각(클레임)
JSON 형태로 다수의 정소를 넣을 있다
3가지 클레임 : 등록, 공개, 비공개
(1) Registered Claim(등록된 클레임)
토큰 정보를 포현하기 위해 이미 정해진 종류의 데이터(선택, 권장사항)
- issuer 토큰 발급자
- subject토큰 제목
- audience 대상자
- exp 만료시간
- iat 이슈시간
- jti 고유 식별자
(2) 공개 클레임
URI형식으로 충돌 방지된 이름을 갖음
- { https://elice.io: true }
(3) 비공개 클레임
서버와 클라이언트사이의 임의
- 사용자 정의 클레임으로 서버와 클라이언트 협의로 사용되는 클레임
- 서버와 클라이언트 사이에 임의로 지정한 정보를 저장. 이 클레임은 공개 클레임과 달리 이름이 중복되어 충돌 될 수 있으니 유의
- { "student_name": "elice" }
1.3 Signature
서명, 토큰 인코딩,유효성 검증할 때 사용하는고유한 암호화 코드
헤더 정보의 인코딩 값과 정보의 인코딩 값을 합친 후 주어진 비밀키로 해시를하여 생성
1.4 JWT 사용법
PyJWT 모듈 필요
import jwt
(1) 암호화
jwt 화 된 문자열
jwt.encode( 인코딩할 데이터, 시크릿 키값, algorithm=알고리즘)
(2) 복호화
원본 문자열
jwt.decode( 디코딩할 데이터, 시크릿 키값, algorithm=[알고리즘])
응용
아이디와 패스워드가 일치하면 로그인 토큰 발급에 사용
https://meetup.toast.com/posts/239
'CS > Web' 카테고리의 다른 글
[BE-Django] model (0) | 2021.12.06 |
---|---|
[BE-Flask] 4. HTTP (0) | 2021.11.09 |
[BE-Flask] 3. 플라스크 템플릿 (0) | 2021.11.08 |
[BE - Flask] 2. 라우팅(Routing) (0) | 2021.11.04 |
[BE - Flask] 1 Flask 시작하기: 다운로드, 실행 (0) | 2021.11.03 |