Hello

18. JWT 구조이해

by 볼빵빵오춘기

JWT 구조

  • .으로 구분해서 Header.Payload.Signature의 3 부분으로 이루어져있다.
  • Header, Payload, Signature 각 부분은 Base64Url로 인코딩 되어 표현된다.
    ※ Base64Url는 암호화된 문자열이 아니고, 같은 문자열에 대해 항상 같은 인코딩 문자열을 반환한다.

 

Header

{
	"alg" : "HS256"
	, "typ" : JWT
}
  • Signature를 해싱하기 위한 알고리즘을 지정한다.
  • header는 암호화 된 것이 아니다.

 

Payload

{username:jinny}

토큰에서 사용할 정보의 조각들인 클레임(요구사항, 정보)이 담겨 있다.(⇒ 엔티티 및 추가 데이터에 대한 설명을 담고 있다.)

 

Signature

  • 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다.
  • Signature은 위에서 만든 Header와 Payload의 값을 각각 BASE64Url로 인코딩한다. →
    인코딩한 값을 비밀 키를 이용해 Header에서 정의한 알고리즘으로 시그니쳐를 만든다. →
    이 값을 BASE64Url로 디코딩하여 사용한다.
  • 암호화에 목적이 아니라 서명의 목적이 있다.
    이 데이터가 유효한지 아닌지에 대한 무결성을 검증하기 위한 데이터이다.
    비밀성을 보장하는 목적은 아니다.

 

JWT를 통해서 무엇을 할 수 있나?

한 사이트가 서버가 여러 개일 경우 검증 할 때 세션을 이용해서 클라이언트가 인증을 하는 것이 아니라 토큰을 통해 인증하기 때문에 어느 서버에 들어가더라도 상관이 없다.

 

JWT를 만들어서 클라이언트한테 던지고 클라이언트는 그 값을 가지고 개인정보를 요청할 때 서버는 JWT를 디코더해서 다시 정보를 만들것이다.

만든 상태에서 header,payload, 자기가 알고 있는 비밀키(위에서는 코스)로 HMAS SHA256으로 암호화를 해봤더니

인코드에서 파란색 글씨와 똑같이 나오면 유효하다라는 것이다.

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기