Spring boot에서 JWT 구현(1)
사이드 프로젝트를 하며 로그인 부분을 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 구조
설명 | 예 | |
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
- 인증 타입으로 보통 Basic으로 이용
- 다른 타입으로는 아래와 같이 있다고 하는데 여러 코드들을 구경한 결과 'Bearer'를 주로 쓰는것 같아 저도 사용했습니다ㅎㅎ
- IANA registry of Authentication schemes
- Authentification for AWS servers (AWS4-HMAC-SHA256)
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)