JWT 4. JWT 기반의 사용자 인증 시스템

agnusdei·2023년 7월 28일
0

JWT 기반의 사용자 인증 시스템은 JSON Web Token(JWT)을 사용하여 사용자의 인증과 권한 부여를 관리하는 시스템을 의미합니다. JWT는 인증 정보를 안전하게 전달하고 저장하기 위해 사용되며, 특히 분산된 환경에서 사용자 인증과 API 보안 인증 등에 많이 활용됩니다.

JWT (JSON Web Token)란?

JWT는 클레임(claim) 기반의 토큰으로, JSON 객체로 표현되며, 사용자 인증 정보와 해당 사용자의 권한 등을 담고 있습니다. 일반적으로 헤더, 페이로드, 서명 세 부분으로 구성됩니다.

  • 헤더(Header): 토큰의 타입과 사용된 암호화 알고리즘 등이 포함됩니다.
  • 페이로드(Payload): 클레임(claim)이 담기며, 사용자의 식별자와 권한 등 정보가 담겨 있습니다.
  • 서명(Signature): 헤더와 페이로드를 인코딩한 후, 비밀 키로 서명한 값입니다.

JWT는 서버와 클라이언트 간의 상태를 저장하지 않고, 필요한 정보를 JWT 자체에 포함하여 사용자 인증 및 권한 검증을 수행합니다.

JWT와 사용자 인증 시스템 통합:

  1. 사용자 로그인:

    • 사용자가 자격 증명(예: 사용자 이름과 비밀번호)을 제공하여 로그인을 시도합니다.
    • 서버는 제공된 자격 증명을 검증하고, 유효한 경우에는 사용자에게 JWT를 발행합니다.
  2. JWT 토큰 발행:

    • 로그인이 성공하면 서버는 사용자의 식별자와 권한 등을 포함한 페이로드를 JWT에 담습니다.
    • JWT는 서버에서 서명된 후 클라이언트에게 전달됩니다.
  3. JWT 토큰 사용:

    • 클라이언트는 발급된 JWT 토큰을 저장하고, 인증이 필요한 요청 시 Authorization 헤더 등에 포함하여 서버에 전송합니다.
    • 서버는 JWT의 유효성을 검증하고, 페이로드에 담긴 정보를 이용하여 사용자 인증과 권한 검증을 수행합니다.

JWT 인증 토큰의 보안 설정:

JWT 토큰은 기본적으로 암호화가 되어 있지 않기 때문에, 토큰의 안전성을 위해 몇 가지 보안 설정을 적용해야 합니다.

  1. 비밀 키(Secret Key): JWT 토큰을 서명할 때 사용되는 비밀 키는 노출되면 안 되므로, 보안에 신경 써야 합니다. 이 비밀 키를 통해 JWT의 무결성을 검증하고 토큰이 변조되지 않았는지 확인합니다.

  2. 토큰 유효기간 설정: JWT에는 토큰의 유효기간을 설정할 수 있습니다. 적절한 유효기간을 설정하여 토큰이 오래 사용되는 것을 방지하고, 토큰 갱신 절차를 구현할 수 있습니다.

  3. HTTPS 사용: JWT는 토큰의 안전성을 위해 HTTPS를 사용하는 것이 좋습니다. HTTPS를 사용하면 데이터 전송 중에 토큰이 도청되는 것을 방지할 수 있습니다.

  4. 클라이언트 측 저장 방식: JWT 토큰은 클라이언트 측에 저장될 수 있습니다. 토큰을 브라우저의 쿠키나 로컬 스토리지에 저장할 때는 XSS(Cross-Site Scripting) 공격을 주의해야 합니다.

JWT를 활용한 사용자 인증 흐름:

  1. 사용자 로그인 시나리오:

    • 사용자가 자격 증명을 제공하여 로그인을 시도합니다.
    • 서버는 제공된 자격 증명을 검증하고, 유효한 경우에는 사용자에게 JWT를 발행합니다.
    • 이후, 사용자는 발급된 JWT를 사용하여 서버에 접근하고 보호된 리소스에 접근할 수 있습니다.
  2. API 보안 인증 시나리오:

    • 사용자가 로그인하여 JWT를 발급받습니다.
    • 이후, API 요청을 할 때마다 발급받은 JWT를 Authorization 헤더 등에 포함시켜 전송합니다.
    • 서버는 해당 JWT를 검증하고, 유효한 경우에만 API 요청을 처리하고 응답합니다.
  3. SSO (Single Sign-On) 시나리오:

    • 사용자가 SSO 서비스에 로그인을 시도합니다.
    • SSO 서비스는 사용자의 자격 증명을 검증하고, 인증된 사용자에게 JWT를 발행합니다.
    • 이후, 다른 서비스에 접근할 때 해당 JWT를 사용자의 식별에 사용하여 인증을 처리합니다.

JWT를 활용한 사용자 인증 시스템은 보안적으로 강력하고 확장성이 높아서 많은 웹 애플리케이션에서 사용되고 있습니다. 그러나 비밀 키의 안전한 관리와 토큰의

적절한 유효기간 설정 등 보안 상 주의사항을 고려하여 구현해야 합니다.

profile
DevSecOps ⚙️ + Pentest 🚩

0개의 댓글