jwt(1) 이론

자이로 체펠리·2022년 1월 26일
0

jwt인증,인가

목록 보기
1/3

이번에 토이프로젝트로 jwt를 사용해 인증을 하는 프로세스를 개발했다. 주로 다른 렌퍼런스를 참고했을 때 인증을 위해 리프레시 토큰, jwt, redis, springfilter 를 사용하여 구현을 하는데 역량부족으로 인터셉터와 디비 만을 사용하여 로직을 구현했다. 물론 리팩토링을 할 예정이다.

자가 수용적? 토큰의 기본정보, 전달할 정보, 인증 가지 자기 자신이 지니고 있음을 뜻한다.

  • 정의

    json web token 의 약자로 json 객체를 사용하여 가볍고 자기 수용적인 방식으로 정보를 안정성있게 전달하기 위한 방법이다. RFC 7519의 기준이다.

특징

  • 자가수용적이다.
    • jwt는 필요한 모든 정보를 자체적으로 지니고 있다. jwt 시스템에서 발급된 토큰은 토큰에 대한 기본정보, 전달 할 정보, 토큰이 검증되어있다는 것을 증명해 주는 signature를 포함하고 있다.
  • 쉽게 전달 될 수 있다.
    • jwt는 자가 수용적이기 때문에 두 개체에서 손쉽게 전달 될 수 있다. 웹서버의 경우 http 헤더에 넣어서 전달 또는 URL의 파라미터로 전달 할 수 있다.

JWT 구조

jwt 토큰은 . 을 구분자로 3가지 문자열로 구성되어있으며

xxxxx.yyyyy.zzzzz

헤더, 페이로드, 서명으로 이뤄져있다.

헤더

헤더는 일반적으로 2가지 정보를 내포한다.

  1. type : 토큰의 타입을 의미하고 jwt가 들어간다.
  2. alg : 토큰의 서명을 만든 알고리즘을 기입한다. SHA236이나 RSA가 들어간다.

예를들어

{
	'alg' : "HS256",
	 'typ' : 'jwt'
}

위의 해더는 HS256으로 서명된 jwt를 의미한다.

페이로드

토큰의 두번째 부분은 페이로드다. 페이로드는 claims를 포함한다. claim은 개체나 추가적인 정보를 의미한다. resisterd claims, pulibc slaims, private claims 3가지 종류의 클래임이 존재한다.

  • registered claims : 의무는 아니나 의미있는 정보를 내포하기 위해 추가하는 클레임으로써 iss(isuuer), exp(만료시간), sub(subject) aud(audience), 기타 등등 이있다.
  • public claims : IANA jwt 등록을 혹은 충돌이 방지된 클래임 (URI) 형식을 사용한다.
  • private claims : 클라이언트와 서버 합의하에 사용되는 크레임들이다. 공개 클래임과 달이 이름이 중복되어 충돌할 수 있으니 사용에 유의해야한다.

서명

헤더의 인코딩 값과 페이로드의 인코딩 값을 합친후에 주어진 비밀키로 해쉬하여 생성한다. 이렇게 만든 해쉬값을 base64형태로 나타나게 된다.

인증시 사용법

간략하게 인증시에 어떻게 사용했는지 정리해본다.

  1. 인증 과정은 jwt와 인터셉터를 활용하여 이뤄 집니다.

  2. 로그인 시 access token과 refresh token이 발급 되며 기본적으로 어세스 토큰으로 인증과 인가가 이뤄진다. 인증 성공시 요청한 자원을 응답한다.

  3. 어쎄스토큰 만료시 refresh 토큰을 사용자 정보를 식별하여 access token을 재발급합한다.

  4. 가계부와 관련된 url로 접근시 인증이 이뤄지며, 인증 실패 시 로그인 페이지로 리다이렉트 한다.

    참고

    https://jwt.io/introduction
    https://gyoogle.dev/blog/web-knowledge/JWT.html

profile
"경의를 표해라. 경의를 갖고 회전의 다음 단계로 나아가는 거다…… [LESSON 4] 다."

0개의 댓글