JWT

pitbull terrier·2020년 8월 12일
0

개인공부

목록 보기
6/8

JWT

Json Web Token의 줄임말이다.
가볍고 자가수용적인 방식으로 정보를 안전성 있게 전달해준다.

그래서 어떤 언어에서 쓰는가 ?

JWT는 C,Java,Python,C++,R,C#,PHP,JavaScript,Ruby,Go,Swift등 대부분의 주류 프로그래밍 언어에서 지원된다.

자가수용적?

JWT는 필요한 모든 정보를 자체적으로 지니고 있다.
JWT 시스템에서 발급된 토큰은 토큰에 대한 기본정보,전달 할 정보, 그리고 토큰이 검증됐다는 것을 증명해준다.

전달은 쉬운가?

JWT는 자가수용적이므로 두 개체 사이에서 손쉽게 전달 될 수 있다.
웹서버의 경우 HTTP 헤더에 넣어서 전달 할 수도 있고 URL의 파라미터로 전달 할 수도 있다.

그래서 어떤 상황에서 사용하는가?

  • 회원인증 : JWT를 사용하는 가장 흔한 시나리오다.
    유저가 로그인을 하면 서버는 유저의 정보에 기반한 토큰을 발급하여 유저에게 전달해준다.
    그 후,유저가 서버에 요청을 할 때 마다 JWT를 포함하여 전달한다.
    서버가 클라이언트에게서 요청을 받을때 마다 해당 토큰이 유효하고 인증됐는지 검증을 하고 유저가 요청한 작업에 권한이 있는지 확인하여 작업을 처리한다.
    서버측에서는 유저의 세션을 유지 할 필요가 없다. 즉 유저가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고 유저가 요청을 했을때 토큰만 확인하면 되니 세션 관리가 필요없어서 서버 자원을 많이 아낄 수 있다.

  • 정보교류 : JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다.
    이유는 정보가 sign이 되어있기 때문에 정보를 보낸이가 바뀌진 않았는지 또 정보가 도중에 조작되지는 않았는지 검증할 수 있다.

어떻게 생겼나 ?

1.HEADER

토큰의 헤더는 typ과 alg 두 구지 정보로 구성된다.
alg는 헤더를 암호화 하는 것이 아니고 signature(서명)를 해싱하기 위한 알고리즘을 지정하는 것이다.

  • typ : 토큰의 타입을 지정 ex)JWT
  • alg : 알고리즘 방식을 지정하며 signature(서명)및 토큰 검증에 사용 ex)HS256

2. PAYLOAD

토큰의 페이로드에는 토큰에서 사용할 정보의 조각들인 클레임이 담겨 있다.
클레임은 총 3가지로 나누어지며 Json(Key/Value)형태로 다수의 정보를 넣을 수 있다.

- 등록된 클레임

등록된 클레임은 토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터들로 모두 선택적으로 작성이 가능하며 사용할 것을 권장한다.
또한 JWT를 간결하게 하기 위해 key는 모두 길이 3의 String이다.
여기서 subject로는 unique한 값을 사용한다. 사용자 이메일을 주로 사용한다.

- 공개 클레임

공개 클레임은 사용자 정의 클레임으로 공개용 정보를 위해 사용된다.
충돌 방지를 위해 URI포맷을 이용한다.

- 비공개 클레임

비공개 클레임은 사용자 정의 클레임으로 서버와 클라이언트 사이에 임의로 지정한 정보를 저장한다.

3. Signature

Signature는 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드다.
Signature은 위에서 만든 헤더와 페이로드의 값을 각각 BASE64로 인코딩하고 인코딩한 값을 비밀 키를 이용해 헤더에서 정의한 알고리즘으로 해싱을 하고 이 값을 다시 BASE64로 인코딩하여 생성한다.

JWT 토큰 예시

profile
yoonbitnara.github.io

0개의 댓글