본문 바로가기
Backend/Spring

Spring boot에서 JWT 구현(1)

by 나는 유찌 2022. 2. 19.
SMALL

 

사이드 프로젝트를 하며 로그인 부분을 JWT로 구현을 했습니다.

그런데요,,

백엔드 말고도 프론트엔드를 같이 구현하며 많은 고민을 하고 삽질을 하여

누군가에게는 이 글이 도움이 되기를 바라며,, 기록을 해보겠습니다🐥

해맑🌟

 

 

JWT(Json Web Token)란?


 

  • 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로, payload는 몇몇 클레임(claim) 표명(assert)을 처리하는 JSON을 보관한다.
  • 예를 들어 서버는 '관리자로 로그인됨'이라는 클레임이 있는 토큰을 생성하여 이를 클라이언트에 제공할 수 있다. 그러면 클라이언트는 해당 토큰을 사용하여 관리자로 로그인됨을 증명한다.
  • 토큰은 크기가 작고 URL 안전으로 설계되어 있으며 특히 웹 브라우저 통합 인증(SSO) 컨텍스트에 유용하다.
  • 출처 : 위키백과

 

JWT를 구현하며 발급된 토큰이 JWT 토큰의 형식과 일치하는지는 아래 공식 사이트에 들어가 확인하면 된다.

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

제가 JWT를 구현하며 발급받은 토큰을 입력하여 찍은 사진입니다😀

 

 

 

JWT 구조


  설명
Header 토큰 유형과 사용한 서명 알고리즘의 두 부분으로 구성 {
  "alg": "HS256",
  "typ": "JWT"
}
Payload 사용자 및 추가 데이터에 대한 설명인 Claim을 포함
Payload에는 사용자의 비밀번호와 같은 중요한 정보는 포함시키지 않음
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
Signature 토큰이 전달되는 도중에 변경되지 않았는지 확인 HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

 

 

 

 

Authorization Header에 대하여


 

로그인을 한 후 발급 받은 Access token을 클라이언트에서 API를 요청할 때 Header에 넣어서 아래와 같이 보내준다.

Authorization: <type> <credentials>

 

1. Type

 

2. Credentials

  • 여기다 JWT 토큰을 넣으면 된다.
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l

결과 예시입니다 😀

 

참고


 

 

Authorization - HTTP | MDN

HTTP Authorization 요청 헤더는 서버의 사용자 에이전트임을 증명하는 자격을 포함하여, 보통 서버에서 401 Unauthorized 상태를 WWW-Authenticate (en-US) 헤더로 알려준 이후에 나옵니다.

developer.mozilla.org

 

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

 

 

다음글


2022.02.20 - [Backend/Spring] - Spring boot에서 JWT 구현(2)

2022.02.20 - [Backend/Spring] - Spring boot에서 JWT 구현(3)