• bcho.tistory.com/999 및 pyjwt.readthedocs.io 및 https://sanghaklee.tistory.com/47

;

  • JWT 란?
    • Claim based Token.
    • Header.Payload.Signature 으로 구성 됨.
    • 각각 Base64로 인코딩.
  • 단순 Cookie/Session 인증 방식의 문제점
    • Server Scale-Out 이슈.
    • Cookie Client(PC,Mobile,...) 및 CORS 도메인 이슈.
    • Session Repogitory 부하 이슈.
  • Claim based Token
    • 토큰 자체에 데이터(ID,권한,정보 등등)를 Claim-Set 으로 저장하여 활용하는 방식.
    • 서버에서 별도의 조회 과정이 없어 부담이 덜 해질 수 있으나, 당연히 양날의 검이 될수있다.
    • 개인정보는... 따로 암호화 해서 저장.
    • 기본적으로는... 서버생성 이후엔, 제어가 안되기 때문에~ 만료시간 셋팅이 필수적이다.
  • 구조
    • Header
    • {
      • "typ": "JWT"
      • "alg": 시그니처 HMAC에 사용되는 알고리즘. (SHA256, RSA, ... )
    • Payload : 토큰에 실질적으로 담을 데이터. 
    • {
      • // https://jwt.io/introduction 
      • // 성격에 따라... Registered, Public, Private Claims 으로 나뉨.
    • }
    • Signature
      • HMAC_SHA256( base64(header)+"."+base64(payload) , secret)
      • 해더 및 페이로드의 무결성 및 변조방지를 위해서, HMAC을 활용함.
  • ...
  • % Base64 란?
    • Binary를 -> Text로 변경하는 Encoding이다.
    • 8비트 이진 데이터 -> ( OS 문자코드 영향받지 않는) ASCII 문자로만 구성된 문자열로 변환!
    • ...
  • % HMAC 이란?
    • 해시 기반 메세지 인증 코드 (Hash-based Message Authentication Code)
    • Message + Timestamp -func(Key)-> Hash
    • "Message + Timestamp + Hash" 전송
    • 서버에서는 해당 Message + Timestamp 해당 Key를 통해 Hash 일치하는지? 검증.
    • (당연히 Timestamp 시시각각 변한다.)
    • 예) http body 위변조 방어
      • Authorization:{{acqHmacHeader}}
      • X-Authorization-Timestamp:{{acqHmacTimestamp}}
      • X-Authorization-Content-SHA256:{{acqHmacContentSha}}
      • X-Authenticated-Id: {{acqAccountID}}
      • X-MMSessionToken
      • X-RBXHmac-Timestamp
      • X-RBXHmac-Content-SHA256
  • % 다양한 Sign 방식!
    • 단방향 해쉬 함수
      • MD5(SHA-1), HAS-160, SHA-224
      • SHA-256, SHA-384, SHA-512
    • 양방향 암호화
      • DES, 2TDEA, 3TDEA
      • SEED,HIGHT,ARIA-128,AES-128,ARIA-128,AES-192, ARIA-256,AES-256

-끝-

'통신과 프로토콜 그리고 보안' 카테고리의 다른 글

OAuth  (0) 2019.11.10
HTTP 와 SSL 및 보안  (0) 2019.11.10
SMTP , (POP3) , (IMAP)  (0) 2019.11.10
SSH (TELNET) , (scp), (rsync)  (0) 2019.11.10
인터넷(Internet) 과 웹(Web)  (0) 2019.10.27

+ Recent posts