Authorization: Bearer <jwt_token>

유정원·2024년 8월 30일

python

목록 보기
14/21

Authorization: Bearer <jwt_token>은 클라이언트가 서버에 요청을 보낼 때, 해당 요청이 인증된 사용자로부터 온 것임을 증명하기 위해 사용되는 HTTP 헤더입니다. 이 헤더는 주로 JSON Web Token (JWT)를 사용한 인증 시스템에서 사용되며, <jwt_token> 부분에는 클라이언트가 서버로부터 발급받은 JWT가 포함됩니다.

구조 설명

  • Authorization: HTTP 요청 헤더 중 하나로, 클라이언트가 서버에 자신의 신원을 증명하기 위해 사용됩니다.
  • Bearer: "Bearer" 유형은 서버가 JWT를 통해 클라이언트를 인증하고 있다는 것을 나타냅니다. 이 유형은 토큰을 소지한 자에게 리소스에 접근할 권한이 있음을 의미합니다.
  • <jwt_token>: 클라이언트가 서버로부터 발급받은 JWT입니다. 이 토큰에는 사용자의 인증 정보와 권한이 포함되어 있으며, 서버는 이 토큰을 검증하여 클라이언트의 요청을 허용하거나 거부합니다.

JWT 인증 과정

  1. 클라이언트 로그인: 클라이언트가 사용자 자격 증명(예: 사용자 이름, 비밀번호)을 사용해 서버에 로그인 요청을 합니다.

  2. 서버에서 JWT 발급: 서버는 자격 증명을 검증한 후, 클라이언트에게 JWT를 발급합니다. 이 토큰은 사용자의 정보를 포함하며, 클라이언트는 이후 요청에서 이 토큰을 사용해 자신을 인증합니다.

  3. 클라이언트의 요청: 클라이언트는 이후 서버에 요청을 보낼 때, Authorization 헤더에 Bearer <jwt_token>을 포함시켜 요청을 보냅니다.

    GET /api/some-protected-resource/ HTTP/1.1
    Host: example.com
    Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
  4. 서버에서 JWT 검증: 서버는 요청을 받으면, Authorization 헤더에 포함된 JWT를 검증합니다. JWT의 서명이 유효하고, 토큰이 만료되지 않았으며, 해당 토큰이 적절한 권한을 가지고 있다면, 서버는 요청을 처리하고 응답을 반환합니다.

  5. 응답 반환: 서버는 요청이 유효하다면 클라이언트에게 요청된 데이터를 반환하거나 작업을 수행합니다. 만약 JWT가 유효하지 않거나 권한이 없다면, 서버는 401 Unauthorized 또는 403 Forbidden 상태 코드를 반환할 수 있습니다.

JWT의 이점

  • 무상태성: 서버는 클라이언트의 세션 상태를 저장할 필요가 없습니다. 모든 필요한 정보는 JWT 자체에 포함되어 있기 때문에, 서버는 토큰을 검증하는 것만으로도 클라이언트를 인증할 수 있습니다.
  • 확장성: 무상태성이기 때문에, 서버를 쉽게 확장할 수 있습니다. 여러 서버 간에 세션을 공유할 필요 없이, 각 서버가 독립적으로 JWT를 검증할 수 있습니다.
  • 보안: JWT는 서명되어 있기 때문에, 토큰의 무결성을 보장할 수 있습니다. 클라이언트가 서버의 비밀 키를 알지 않는 한, 토큰을 위조하거나 변조할 수 없습니다.

JWT의 취약점 및 고려 사항

  • 토큰 유출: JWT가 유출되면, 공격자가 해당 토큰을 사용해 인증된 사용자로 행세할 수 있습니다. 따라서 JWT는 안전하게 저장되어야 하며, 일반적으로 클라이언트 측에서 로컬 스토리지보다는 보안이 강화된 방법(예: HTTP Only 쿠키)에 저장하는 것이 좋습니다.
  • 만료 관리: JWT는 만료 시간이 포함되므로, 만료된 토큰은 재사용할 수 없습니다. 하지만 만료 기간이 너무 길면, 유출 시 피해가 커질 수 있으며, 너무 짧으면 사용자 경험이 떨어질 수 있습니다. 이 문제를 해결하기 위해 종종 Access Token과 Refresh Token을 함께 사용합니다.
  • 서명 알고리즘: 서버에서 JWT를 발급할 때 사용하는 서명 알고리즘은 강력한 알고리즘을 사용하는 것이 좋습니다. 예를 들어, HS256(HMAC SHA-256)이나 RS256(RSA SHA-256)과 같은 알고리즘이 일반적으로 사용됩니다.

요약

Authorization: Bearer <jwt_token> 헤더는 클라이언트가 서버에 요청을 보낼 때 자신을 인증하기 위해 사용하는 방식입니다. JWT를 사용하면 서버가 클라이언트의 신원을 검증할 수 있으며, 이를 통해 리소스에 대한 접근 권한을 관리할 수 있습니다. JWT는 무상태성, 확장성, 보안 등의 장점이 있지만, 토큰 유출과 만료 관리 등의 측면에서 신중한 고려가 필요합니다.

0개의 댓글