공부기록/TIL

2023/01/18 TIL | JWT 인증(Authentication)

또리머 2023. 1. 18. 16:54
반응형

💭 오늘의 학습 전략

# JWT

◼️ 종류

 ◾Access Token

 ◾Refresh Token

◼️ 구조

◼️ 인증 절차

◼️ 장단점

🌼 학습한 것들

◾ JWT(JasonWebToken)_종류

 ▪️  Access Token

  - 보호된 정보들에 접근할 수 있는 권한 부여

  - 비교적 짧은 유효시간을 주어 탈취되어도 오래 사용할 수 없도록

 ▪️  Refresh Token

  - Access Token 만료 시 Refresh Token 이용해서 새로 발급

  - 편의 < 정보보호 이면 사용하지 않기도 한다

◾ JWT(JasonWebToken)_구조

 ▪️  Header

  - 어떤 종류의 토큰인지 ex) JWT

  - 어떤 알고리즘으로 Sign할 지 ex) HS256

 ▪️  Payload

  - 서버에서 활용할 수 있는 사용자 정보 (사용자 이름 등 필요한 데이터)

  - 어떤 정보에 접근 가능한지(권한)

 ▪️  Signature

  - 원하는 비밀키, 알고리즘 (Header 지정) -> Header, Payload 단방향 암호화 수행

◾ JWT(JasonWebToken)_인증 절차

 ▪️  로그인 요청

 ▪️  로그인 정보 확인, 암호화된 토큰 생성

  - Access, Refresh 모두 생성

 ▪️  토큰 전송 ~> 클라이언트는 토큰 저장

  - Local Storage, Session Storage, Cookie 등

 ▪️  HTTP Header / Cookie에 담아 Request 전송

  - Bearer authentication

 ▪️  토큰 검증 -> 우리 토큰 판단 -> 처리 및 응답

◾ JWT(JasonWebToken)_장점

 ▪️  stateless, scalable 애플리케이션 구현 용이 (서버에 클라이언트 저장X)

 ▪️  요청마다 자격 증명 전송할 필요 X

 ▪️  인증 담당 시스템을 다른 플랫폼으로 분리하기에 용이()

 ▪️  권한 부여에 용이

◾ JWT(JasonWebToken)_단점

 ▪️  Payload 디코딩 용이(base64) -> 민감정보 포함하지 않기!!

 ▪️  토큰 길이가 길면(저장정보 많으면) 네트워크에 부하 줄 수 있음

 ▪️  자동 삭제 불가 -> 만료 시간 추가하기(너무 길지 않게)

 

 

💨 하루를 마치며

1. 실습을 하다가 내용이 궁금해서 해독된 Jws<Claims>를 찍어보았다.

JWS는 Signature가 포함된 Jason Web Signature라고 한다.

서버에서 인증을 근거로 인증정보를 서버의 private key로 서명 한것을 토큰화 한 것으로,

header(json) + payload(json) + signature 로 이루어져있다.

는데.. 잘 와닿지는 않는 설명이었다.

찾아보니 이 외에도 JWE, JWK라는 용어들도 있었는데 우선은 넘어갔다.

memberId, roles를 제외하고는 기존 메서드를 이용해서 set해준 건데 자동으로 이름이 지정되어 있었다. 

iat은 뭐지 했는데 IssueAt이었다.

찾아보니 java.util.Date의 getTime()은 Date를 ms로 변환해서 long타입 데이터로 반환한다고 한다.

잘 쓰지 않던 형식이라서 처음 디버깅을 찍어보고 당황스러웠다.

 

2. JWT 방식의 보안은 예전에 사용했던 기술이라 엄청 낯설지는 않을 거라고 생각했는데 생각해보니 꽤 오래돼서 이게 뭐더라 하는 부분이 조금 있었다. 실제로 애플리케이션에 적용해보면 더 할 것 같다.

3. 그 때 토큰 만료 기간과, Refresh Token을 DB에 저장해두고 사용했던 것 같은데 잘 기억이 나지 않는다😱 직접 구현해본 적은 없어서 열심히 해야할 것 같다!!

반응형