JWT Token

박해인·2024년 5월 7일
0

Spring Security

목록 보기
2/3

JWT
Json Web Token
서버에서 인증된 사용자가 인증을 유지해주는 방법으로 보통은 세션을 사용합니다. 서버 세션을 사용하면 인증된 사용자는 매우 편리하게 서비스를 이용할 수 있고, 대부분의 웹 애플리케이션 서버가 세션을 지원하기 때문에 편리하다.
하지만,

  • 서버를 여러대 둘 경우
  • 같은 사용자가 서로 다른 도메인의 데이터를 요청할 경우, (SSO) 에는 세션을 유지하기 위한 비용이 매우 커지게 됩니다.
    이 때는 서버에 사용자 정보를 저장하는 대신 클라이언트에 사용자 정보를 내려주고, 서버는 토큰의 사용자 정보를 모든 요청에서 확인하고 서비스를 해주는 방식(sessionless)일대, JWT 토큰이 유용하게 사용된다.
  • jwt 스펙에서 지정한 claim
  • iss : issuer 토큰에 발행한 사람(단체, 사이트)가 누구인지
  • sub : Subject 무엇에 관한 토큰인지
  • aud : Audience 누구를 대상으로 한 토큰인지
  • exp : Expiration 토큰의 만료 시간은 언제인지
  • nbf : not before 토큰이 언제부터 유효한지
  • iat : issued at 토큰의 발행시간
  • jti : JWT ID : 토큰 자체의 아이디(일련번호)
  • 그 밖에 인증이 필요하거나 대상서버에서 필요로 하는 데이터

*토큰에 일반적으로 어떤 내용?

  • 일반적으로는 인증에 필요한 최소한의 데이터를 넣습니다.
  • 비밀번호나 전화번호등을 넣는 것은 안전하지 않습니다.
  • 이 토큰은 언제든 공개할 수 있는 정보를 넣는 것이 좋습니다.
  • 왜냐하면 서버에서 인증된 키가 아니라도 언제든 서버는 이 토큰을 열어서 그 안에 어떤 claim이 있는지 볼 수 있습니다.

*토큰은 어떻게 관리할 것인가?

  • 이론적으로는 토큰을 클라이언트가 관리하게 한다.
  • 하지만 실제로 서버는 사용자 정보 캐싱이나 토큰의 유효성 평가, 혹은 refresh 토큰 정책을 위해 서버에 토큰을 관리하기도 합니다.
  • 이 경우, 토큰과 사용자 정보를 관리하는 방법으로 다음과 같은 방법들을 사용하기도 한다. ( redis, hazelcast, db저장)
profile
갓생살고싶어라

0개의 댓글