CS/Web

[BE-Flask] JWT(Json Web Token)

뚱요 2021. 11. 5. 00:00
반응형

 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
)

 

JWT 공식 홈페이지

 

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형식으로  충돌 방지된 이름을 갖음

(3) 비공개 클레임

서버와 클라이언트사이의 임의

  • 사용자 정의 클레임으로 서버와 클라이언트 협의로 사용되는 클레임
  • 서버와 클라이언트 사이에 임의로 지정한 정보를 저장. 클레임은 공개 클레임과 달리 이름이 중복되어 충돌 될 있으니 유의
  • { "student_name": "elice" }

1.3 Signature

서명, 토큰 인코딩,유효성 검증할 때 사용하는고유한 암호화 코드

헤더 정보의 인코딩 값과 정보의 인코딩 값을 합친 후 주어진 비밀키로 해시를하여 생성

1.4 JWT 사용법

PyJWT 모듈 필요

import jwt

(1) 암호화

jwt 화 된 문자열

jwt.encode( 인코딩할 데이터, 시크릿 키값, algorithm=알고리즘)

(2) 복호화

원본 문자열

jwt.decode( 디코딩할 데이터, 시크릿 키값, algorithm=[알고리즘])

응용

아이디와 패스워드가 일치하면 로그인 토큰 발급에 사용

출처:https://jwt.io/

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

https://meetup.toast.com/posts/239

 

JWT를 소개합니다. : NHN Cloud Meetup

JWT는 일반적으로 클라이언트와 서버, 서비스와 서비스 사이 통신 시 권한 인가(Authorization)를 위해 사용하는 토큰이다.

meetup.toast.com

 

반응형

'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