JWT & OAuth 정리

2023. 6. 1. 18:25BackEnd(Java)/Spring Boot

✅ 아래 내용들에 대해서 알아보자

- JWT
- AccessToken/Refresh Token
- OAuth

 

 

JWT

 Json Web Token(JWT)는 웹 표준 방식으로 JSON 객체를 사용해서 인증/인가 처리를 진행할 때 사용된다. 보통 회원 인증처리에 사용되며 프로세스에 대해서 알아보자

 

1. 회원 인증 처리할 때 유저가 로그인 시 토큰을 발급하여 유저에게 전달하고 유저가 서버에 요청할 때마다 토큰을 HTTP Header에 포함하여 전달한다. 

 

2. 서버 측에서는 Header에 있는 토큰을 통해 검증/권한 확인 후 작업을 처리하게 된다.

 

3. JWT을 통해서 처리하기 때문에 서버 측에서는 세션을 관리할 필요가 없게 되므로 자원을 아끼게 되고 세션을 관리하게 되면 중앙집중형 방식으로 진행하게 돼서 서버 Scale Out 하게 될 경우 서버마다 세션을 관리하게 힘들게 된다. 

 

4. 따라서 JWT 토큰을 통해 서버 간의 교환, 탈 중앙화 방식이 되므로 최근에는 JWT 방식으로 인증/인가 처리를 많이 한다.

 

 

JWT 구조

 

Header 

 header는 두 가지의 정보를 가지고 있다. 토큰의 헤더 부분에 인코딩 된 값이 들어가게 된다

- typ: 토큰 지정

- alg: 해싱 알고리즘(HMAC , SHA256, RSA 주로 사용)

{
   "typ": "JWT",     
   "alg": "SHA256"
}

 

Payload

 Payload 부분에는 토큰에 담을 정보가 있다. 담는 정보를 '클레임'이라고 부르고, 클레임에는 총 3가지로 구성된다.

  1. 등록된(registered) 클레임
  2. 공개(public) 클레임
  3. 비공개(private) 클레임

 

하나씩 알아보자.

 

1. 등록된(registered) 클레임

 등록된 클레임들은 서비스에서 필요한 정보들이 아닌 토큰에 대한 정보를 담기 위한 데이터(메타 데이터)

 

  • iss: 토큰 발급자 (issuer)
  • sub: 토큰 제목 (subject)
  • aud: 토큰 대상자 (audience)
  • exp: 토큰의 만료시간 (expiraton), 시간은 NumericDate 형식으로 되어있어야 하며 (예: 1480849147370) 언제나 현재 시간보다 이후로 설정되어있어야 한다
  • nbf: Not Before 를 의미하며, 토큰의 활성 날짜와 비슷한 개념, 여기에도 NumericDate 형식으로 날짜를 지정하며, 이 날짜가 지나기 전까지는 토큰이 처리되지 않습니다.
  • iat: 토큰이 발급된 시간 (issued at), 이 값을 사용하여 토큰의 age 가 얼마나 되었는지 판단할 수 있습니다.
  • jti: JWT의 고유 식별자로서, 주로 중복적인 처리를 방지하기 위하여 사용됩니다. 일회용 토큰에 사용하면 유용

 

2. 공개(public) 클레임

 공개 클레임들은 충돌이 방지된 이름을 가지고 있어야 한다. 충돌 방지를 위해 클레임 이름을 URI 형식으로 짓는다.

 

{
        "https://www.abc.com/jwt_claims/is_admin" : true
}

 

3. 비공개(private) 클레임

 비공개 클레임은 클라이언트<->서버 간의 협의하에 사용되는 이름들이다.

 

이렇게 구성된값들이 인코딩 되어 토큰에 payload 부분에 인코딩 되어서 들어가게 된다.

 

 

Signature

 마지막 서명부분은 헤더의 인코딩값과 payload의 인코딩 값을 합친 후 주어진 비밀키로 해쉬 하여 생성한다.

 

 

https://jwt.io/에 들어가서 JWT 토큰 값을 통해 Header, PayLoad, Signature 값들을 직접 확인 가능하다.

 

 

위의 그림을 보면 빨간색 부분이 Header의 인코딩된 값들이며, 보라색 부분은 Payload, 마지막으로 파란색 부분은 Header 인코딩 + Payload 인코딩 값을 비밀키로 해쉬 하여 나온 값이다.

 

 

Acces

 

OAuth

 

 


참고자료

반응형