Published on

24.02.05 양수원 회고

Authors
  • avatar
    Name
    양수원
    Twitter

24.02.05 양수원 회고

프로젝트에 로그인 방식에 대해서 의논하다가 JWT토큰을 사용해 인증하는 방식을 사용하기로 하였다.

오늘 회고는 JWT인증 방식에 대해서 알아보자.

✅ 인증/인가

인증이란

  • 사용자가 로그인 과정을 통해 자신임을 증명하는 과정
  • HTTP 통신은 Stateless 이기 때문에, 사용자는 매 요청마다 자신을 증명해야 한다

인증방법

  • API 기반 개발 : JWT 토큰 사용

인가란

  • 인증된 사용자가 어떤 권한이 있는지 확인하는 과정
  • 특정 리소스(resource)나 기능은 권한이 있어야만 접근 가능 → 인가를 통해 수행

인가 방법

  • 인증된 사용자를 대상으로, 비즈니스 로직을 통해 체크

✅  API 기반 인증기법

JWT 기반 인증

  • API 요청을 할때 https 헤더에 아래와 같이 토큰의 정보를 담아 전송한다.
Authorization: Bearer eyJhbGci0iJIUzUxMiJ9.eyJzdl~IiOiJ0ZXN0ZXJAdGVzdC5jb20iLCJpYXQiOjE1OTU3MzM2NTcsimV4cCI6MTUSNjUSNzY1N30.Nn4dlMOVLZg79sfFACTipCPKqWmpZMZQsbNrXdJJNWkRv50_17bPLQPwhMobT4vBOG6Q3JYjhDrKFlBSaUxZOg

JWT는 세파트로 나누어지며, 헤더(Header), 페이로드(Payload), 서명(Sinature)로 구성되어 있다.

  • 토큰을 Base64로 디코딩 하면 아래와 같다.
{ // header
  "typ": "JWT",
  "alg": "HS512"
}.
{ // payload
  "sub":"40288093784915d201784916a40c0001",
  "iss": "demo app",
  "iat":1595733657,
  "exp":1596597657
}.
Nn4d1MOVLZg79sfFACTipCPKqWmpZMZQsbNrXdJJNWkRv50_17bPLQPwhMobT4vBOG6Q3JYjhDrKFlBSaUxZOg
// signature
  • header

    • typ: 토큰의 타입
    • alg: 토큰의 signature를 발급할 때 사용한 해시 알고리즘
  • payload

    • sub: subject로, 토큰의 주인을 의미하는 값으로 유저 ID나 이메일 같은 값을 사용
    • iss: issuer로, 토큰을 발행한 주체
    • iat: issued at으로, 토큰이 발행된 날짜와 시간
    • exp: expiration으로, 토큰이 만료되는 시간
  • signature

    • 토큰을 발행한 주체 issuer가 발행한 서명으로, 토큰의 유효성 검사에 사용한다
  • 요청이 오면 본인만 가지고 있는 시크릿 키로 토큰의 유효성 검사를 진행

    Tocken 인증방식

    • header와 payload를 토큰 생성시와 동일하게 secret key를 더한 후 hash 함수를 통과시켜, 그렇게 나온 값과 클라이언트에게 받은 signature 값을 비교함으로써 인증을 진행